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
",ans);
    return 0;
}
原文地址:https://www.cnblogs.com/kuaileyongheng/p/6816968.html