COGS 1151 活动安排

- 有 N 场活动,每场活动在特定的时间需要占用场地。

- 如果有两场活动需要同一时间占用场地,则不能同时举行

- 问最多能举行多少场活动?

 

将所有活动按照结束时间从早到晚排序后贪心即可

具体思路看代码注释吧

如果要用的话记得加打开文件

#include <cstdio>
#include <algorithm>
using namespace std;
struct activity
{
    int start, end;
}a[10005];
int n;
int cmp(const activity &a,const activity &b)
{
    return a.end < b.end;
}
int main()
{
    scanf("%d", &n);
    for(int i=0;i<n;i++) 
        scanf("%d%d",&a[i].start,&a[i].end);
    sort(a,a+n,cmp);//排序顺序按结束时间从小到大排
    int cur=0,ans=0;//cur是已经安排的最后一个活动的结束时间 
    for(int i=0;i<n;i++)//枚举每个活动 
        if(a[i].start>cur)//如果该活动开始时间晚于cur 
        {
            cur=a[i].end;
            ++ans;
        }
    printf("%d\n",ans);
    return 0;
}
posted @ 2017-05-06 15:32  快乐永恒  阅读(262)  评论(0编辑  收藏  举报