活动选择问题
题目描述
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, 最后和同学一起讨论才知道“清零”, 这是一个容易忽略的地方。。。一定要注意哈!!
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。