51nod贪心算法入门-----活动安排问题

有若干个活动,第i个开始时间和结束时间是[Si,fi),只有一个教室,活动之间不能交叠,求最多安排多少个活动?

输入

第1行:1个数N,线段的数量(2 <= N <= 10000)
第2 - N + 1行:每行2个数,线段的起点和终点(-10^9 <= S,E <= 10^9)

输出

输出最多可以选择的线段数量。

输入示例

3
1 5
2 3
3 6

输出示例

2

我们可以知道先安排最早结束的活动可以更多的安排活动。首先就是将所有的活动结束时间按先后顺序给排序;然后以结束时间为线索一路检索下去,判断开始时间是否早于前面一次活动的结束时间。这里可以用结构体或者两个数组来把一个活动的开始时间和结束时间联系起来。

#include<stdio.h>
#include<iostream>
#define max 10001
using namespace std;
int main(){
int n,i,j,temps,tempo;
int start[max],over[max];
while(scanf("%d",&n)!=EOF){
int sum=0,t=-1000000000;
for(i=0;i<n;i++){
cin>>start[i]>>over[i];
}
for(i=0;i<n;i++)
for(j=i;j<n;j++){
if(over[i]>over[j]){
tempo=over[i];
over[i]=over[j];
over[j]=tempo;
temps=start[i];
start[i]=start[j];
start[j]=temps;
}
}
for(i=0;i<n;i++){
if(t<=start[i]){
t=over[i];
sum+=1;
}
}
printf("%d\n",sum);
}
return 0;
}

//原本我还考虑了活动时间不能为负数的情况,但是在提交时系统给出的数据中把负数也给算了进去。。。。。

时间: 2024-10-21 06:03:27

51nod贪心算法入门-----活动安排问题的相关文章

51nod贪心算法入门-----活动安排问题2

题目大意就是给几个活动,问要几个教室能够弄完. 这个题目的想法就是把活动的开始——结束的时间看做是数轴上的一段线段,教室的个数就是在某点的时间厚度,求最大的时间厚度就是所需要的教室个数. 1 #include<stdio.h> 2 #include<iostream> 3 #include<stdlib.h> 4 #include<queue> 5 using namespace std; 6 struct node 7 { 8 int start; 9 i

贪心算法_活动安排问题_哈弗曼编码

问题表述:设有n个活动的集合E = {1,2,…,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源.每个活i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si < fi .如果选择了活动i,则它在半开时间区间[si, fi)内占用资源.若区间[si, fi)与区间[sj, fj)不相交,则称活动i与活动j是相容的.也就是说,当si >= fj或sj >= fi时,活动i与活动j相容. 由于输入的活动以其完成时间的非减序排列,所以算法

[C++] 贪心算法之活动安排、背包问题

一.贪心算法的基本思想 在求解过程中,依据某种贪心标准,从问题的初始状态出发,直接去求每一步的最优解,通过若干次的贪心选择,最终得出整个问题的最优解. 从贪心算法的定义可以看出,贪心算法不是从整体上考虑问题,它所做出的选择只是在某种意义上的局部最优解,而由问题自身的特性决定了该题运用贪心算法可以得到最优解.如果一个问题可以同时用几种方法解决,贪心算法应该是最好的选择之一. 二.贪心算法的基本要素 (1)最优子结构性质 (2)贪心选择性质(局部最优选择) 三.贪心算法实例 1.活动安排 设有n个活

51nod贪心算法入门-----完美字符串

约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数. 约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同.给定一个字符串,输出它的最大可能的完美度.例如:dad,你可以将26分配给d,25分配给a,这样整个字符串完美度为77. //这题水题,只要把每个字母出现的次数统计出来然后再排序一下就OK了. #include<stdio.h>#include<iostream>#include<

C++贪心算法实现活动安排问题

_(:з」∠)_ 1 #include <cstdio> 2 #include <iostream> 3 #include <ctime> 4 #include <windows.h> 5 #include <algorithm> 6 #include <fstream> 7 using namespace std; 8 struct activity 9 { 10 int no; 11 int start; 12 int finis

贪心算法之活动分配问题

贪心算法之活动分配问题 在此之前,我们还讨论过贪心算法的活动选择问题,活动选择问题里面的选择策略在这篇文章里面作为贪心选择策略用到.好吧,让我们进入主题. 问题描述 有一个活动集合S={a1,a2,a3,...an},每一个活动ai都有一个开始时间si和结束时间fi,那么活动ai占用的时间段为[si,fi).如果活动ai和aj的时间段没有交集重叠,那么这两个活动是兼容的,即满足si≤fj或者fi≥sj,[ai,aj]就是兼容的.现在我们需要为这些活动安排教室,保证活动之间各不冲突.请问怎么安排才

贪心算法解决会场安排问题

贪心算法解决会场安排问题. [问题描述] 假设要在足够多的会场里安排一批活动,并希望使用尽可能少的会场.(这个问题实际上是著名的图着色问题.若将每一个活动作为图的一个顶点,不相容活动间用边相连.使相邻顶点有不同颜色的最小着色数,相应于要找的最小会场数.) [数据输入] 由文件input.txt给出输入数据,第一行又一个正整数K,表示有K个待安排的活动. 接下来有K行数据,每行有两个正整数,分别表示K个待安排的活动的开始时间和结束时间. [结束输出] 输出最少会场数. input.txt    

贪心算法求解活动选择问题

问题描述:  有一个需要使用每个资源的n个活动组成的集合S= {a1,a2,···,an },资源每次只能由一个活动使用.每个活动a都有一个开始时间和结束时间,且 0<= s < f .一旦被选择后,活动a就占据半开时间区间[s,f].如果[si,fi]和[sj,fj]互不重叠,则称两个ai,aj活动是兼容的.该问题就是要找出一个由互相兼容的活动组成的最大子集.假设输入的活动集合S已经按照结束时间的单调递增顺寻进行了排序. i 1 2 3 4 5 6 7 8 9 10 11 si 1 3 0

51nod贪心算法教程

51nod确实是一个好oj,题目质量不错,wa了还放数据,学习算法来说挺好的,这次我做了几个水的贪心,虽然水,但是确实都很典型. 教程链接:http://www.51nod.com/tutorial/list.html 完美字符串 约翰认为字符串的完美度等于它里面所有字母的完美度之和.每个字母的完美度可以由你来分配,不同字母的完美度不同,分别对应一个1-26之间的整数.   约翰不在乎字母大小写.(也就是说字母F和f)的完美度相同.给定一个字符串,输出它的最大可能的完美度.例如:dad,你可以将