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

相关文章:

  • 2022-12-23
  • 2021-06-15
  • 2022-02-05
  • 2021-11-23
  • 2021-10-13
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-01-20
  • 2018-08-15
  • 2021-05-21
  • 2021-11-07
  • 2022-12-23
相关资源
相似解决方案