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

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

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

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

具体思路看代码注释吧

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

#include <cstdio>
#include <algorithm>
using namespace std;
struct activity
{
int start, end;
}a[];
int n;
int cmp(const activity &a,const activity &b)
{
return a.end < b.end;
}
int main()
{
scanf("%d", &n);
for(int i=;i<n;i++)
scanf("%d%d",&a[i].start,&a[i].end);
sort(a,a+n,cmp);//排序顺序按结束时间从小到大排
int cur=,ans=;//cur是已经安排的最后一个活动的结束时间
for(int i=;i<n;i++)//枚举每个活动
if(a[i].start>cur)//如果该活动开始时间晚于cur
{
cur=a[i].end;
++ans;
}
printf("%d\n",ans);
return ;
}
05-17 16:27