- 有 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; }