题解 | #活动安排#

活动安排

https://ac.nowcoder.com/acm/problem/50161

本题可以转化成最多不重叠区间覆盖问题,要想使最多,就要对右区间从小到大排序,然后要对左区间进行特判,找出第一个左边界大于等于上一个区间的右边界的区间作为下一个区间。

#include<bits/stdc++.h>
using namespace std;
int n;
const int M=1005;
struct node{
    int s,f;
    bool operator<(const node &a)const{
        return f<a.f;
    }
}a[M];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>a[i].s>>a[i].f;
    }
    sort(a+1,a+1+n);
    int point=1;
    int ans=1;
    for(int i=2;i<=n;i++){
        if(a[i].s>=a[point].f){
            ans++;
            point=i;
        }
    }
    cout<<ans<<endl;
    return 0;
}
竞赛奋斗日志 文章被收录于专栏

一个奋斗的蒟蒻

全部评论

相关推荐

点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务