其他分享
首页 > 其他分享> > 活动安排

活动安排

作者:互联网

题目描述

设有n个活动的集合E={1,2,..,n},其中每个活动都要求使用同一资源,如演讲会场等,而在同一时间内只有一个活动能使用这一资源。每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si<fi。如果选择了活动i,则它在时间区间[si,fi)内占用资源。若区间[si,fi)与区间[sj,fj)不相交,则称活动i与活动j是相容的。也就是说,当fi≤sj或fj≤si时,活动i与活动j相容。选择出由互相兼容的活动组成的最大集合。

输入格式

第一行一个整数n(1≤n≤1000);
接下来的n行,每行两个整数si和fi。

输出格式

输出互相兼容的最大活动个数


输入样例 

4

1 3

4 6

2 5

1 7

输出样例 

2

#include<iostream>
#include<algorithm>
using namespace std;

struct hd{ // 定义结构体把开始和结束的时间设为属性。 
    int start, end; 
} a[1001];

bool cmp(hd x, hd y){
    return x.end < y.end;
} 

int main(){
    int n, cnt=1;
    cin>>n;
    for(int i=0; i<n; i++)
        cin>>a[i].start>>a[i].end;
    sort(a, a+n, cmp); // 根据比较每个活动结束时间的大小并排序 
    int t=a[0].end;
    for(int i=1; i<n; i++){
        if(a[i].start>=t){ // 满足要求。 
            cnt++;
            // 将该活动的结束时间重新赋值给time[0].end,继续比较。 
            t=a[i].end;  
        }
    }
    cout<<cnt;
    return 0;
}

 

标签:end,int,安排,样例,si,活动,hd
来源: https://www.cnblogs.com/dks0313/p/16586631.html