您的位置:首页 > 其它

活动选择问题

2014-01-19 16:44 204 查看

题目描述

sdut 大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。

输入

输入包括多组输入,每组输入第一行为申请的活动数n,从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;

输出

输出每天最多能举办的活动数。

示例输入

12
15 20
15 19
8 18
10 15
4 14
6 12
5 10
2 9
3 8
0 7
3 4
1 3


示例输出

5


#include<stdio.h>
int main()
{
int N;
int begin[100];//定义开始时间的数组
int end[100];//定义结束时间数组
int select[100] = {0};/初始化
int i = 0, count = 0;//初始化
int timestart = 0;//初始化
while(scanf("%d", &N)!=EOF)//排序N个不同事件,规则:按照结束时间从小到大排
{
for(int k=0; k<N; k++)
{
scanf("%d", &begin[k]);
scanf("%d", &end[k]);
}
for(int k=0;k<N-1;k++)
for(int l=0; l<N-1-k; l++)
if(end[l]>end[l+1])
{
int t1, t2;
t1 = begin[l];
begin[l]=begin[l+1];
begin[l+1] = t1;

t2 = end[l];
end[l]=end[l+1];
end[l+1] = t2;
}
while(i<N)
{
select[i] = 0;//清零, 使前一次的结果对下一次运算没影响
if(begin[i] >= timestart)
{
select[i] = 1;//每执行一次,这个数组不同就会被赋一次1,(i 是i++ 的,不要忘了哈)
timestart = end[i];
count++;//计数
}
i++;
}
printf("%d\n", count);
timestart = 0;//此处比较容易忽略,注意清零
i=0;//清零
count = 0;//清零
}
return 0;
}
反思:这个题做了一个下午,一直WA, 最后和同学一起讨论才知道“清零”, 这是一个容易忽略的地方。。。一定要注意哈!!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: