活动选择问题

题目描述

 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
", count);
     timestart = 0;//此处比较容易忽略,注意清零
     i=0;//清零
     count = 0;//清零
    }
    return 0;
}
反思:这个题做了一个下午,一直WA, 最后和同学一起讨论才知道“清零”, 这是一个容易忽略的地方。。。一定要注意哈!!
每天训练发现我比别人做的好慢,但是理解的更深刻,如果一开始学一个新知识点就搜模板,那么这样的人是走不远的,毕业之后带走的只有思维,什么荣誉,奖杯都已经不重要了。
原文地址:https://www.cnblogs.com/6bing/p/3931285.html