活动安排
作者:互联网
题目描述
设有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