题目描述
设有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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。