【贪心】活动安排3

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41661809/article/details/82313889

题目描述

设有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 <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>

using namespace std ;
const int MAX = 1005 ;
struct node {
	int s ;
	int f ;
};
bool cmp(const node &a , const node &b)
{
		return a.f<b.f ;
}

int main()
{
	int n  ;
	node a[MAX] ;
	int ans = 1  ;
	cin >> n ;
	if(n==0)
	{
		cout<<"0"<<endl;
		return 0 ;
	}


	for(int i = 0 ; i<n ;i++)
	{
		cin >> a[i].s >>a[i].f ;

	}
	sort(a,a+n,cmp);
	int j = 0 ;
	for(int i = 1 ; i<n ;i++)
	{

		if(a[j].f <=a[i].s)
		{
			j = i ;
			ans++ ;
		}


	}
	cout<<ans;

	return 0 ;
}

 

展开阅读全文

没有更多推荐了,返回首页