1-4 兼容任务(不重复区间)c++

  • Post author:
  • Post category:其他



题目:

设有n个任务,其中每个任务有一个起始时间si和一个结束时间ei,且si<ei,同一时间只能完成一个任务。如果选择了任务i ,则它在时间区间 [si ,ei) 内占用资源。若区间 [si ,ei) 与区间 [sj, ej)不相交,则称任务 i 与任务 j 是相容的。那么,对于给定的任务时间区间,能互相兼容的最大任务个数是多少呢?


输入格式:


第一行一个整数n (1<=n<=1000) ;

接下来n行,每行两个整数si 和 ei。


输出格式:


互相兼容的最大任务个数。


输入样例:


4

1 3

4 6

2 5

1 7


输出样例:


2

一个任务有开始时间、任务时长和结束时间。将问题

简化

,只根据任务结束时间,从早到晚进行排序。越早结束的任务,就有越多的时间来完成剩下的任务,之后比较前一个任务的结束时间和后一个任务的开始时间,就可以确定任务是否可兼容。

#include<iostream>
#include<algorithm>
using namespace std;
struct task{
	int s;//开始时间 
	int e;//结束时间 
};
bool cmp(struct task a,struct task b)
{
	return a.e<b.e;//根据任务结束时间,从早到晚排序 
}
int main()
{
	int i,n,sum=1;//不管怎样,最少都可以完成一个任务 
	struct task t[1020];
	cin>>n;
	for(i=0;i<n;i++)
		cin>>t[i].s>>t[i].e;
	sort(t,t+n,cmp);
	int last=t[0].e; 
	for(i=1;i<n;i++)
	{
		if(t[i].s>=last)
		{
			last=t[i].e;//更新
			sum++;
		}
	}
	cout<<sum;
	return 0;
} 



版权声明:本文为qq_45788060原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。