1549. 活动安排(meet)

1549. 活动安排(meet)

题目描述
我们要在足够多的会场里举行各种活动,一个会场在同一时刻只能安排一个活动,希望使用尽可能少的会场总数。假设一个活动结束后,立即可以在这个会场中进行下一个活动,即如果活动i使用了第3个会场,结束时间是fi,那么如果另有一个活动j的开始时间是sj,sj=fi,那么你可以将活动j也放在这个3号会场进行。

输入
第一行是活动数n(1≤n≤100)。
以后的n行,每行两个整数,分别表示n个活动的开始时间si和结束时间fi(1≤i≤n),si<fi。它们都不超过2000000000。

输出
一个整数,表示需要的最少会场数。

样例输入

4
1 8
2 5
7 15
5 9

样例输出

3

数据范围限制
(1≤n≤100)。

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#include<string>
#include<algorithm>
#include<vector>
#include<queue>
#define fre(x) freopen(#x".in","r",stdin),freopen(#x".out","w",stdout);
using namespace std;
const int MAX=2147483647;
const int N=1e6;
struct node
{
	int begin,end;
} a[110];
int n,ans;
bool f[110];
bool cmp(node a,node b)
{
	if(a.begin==b.begin) return a.end<b.end;
	return a.begin<b.begin;
}
int main()
{
	fre(meet);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d%d",&a[i].begin,&a[i].end);
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++)
		if(!f[i])
		{
			ans++;f[i]=1;
			int b=a[i].begin,e=a[i].end;
			for(int j=1;j<=n;j++)
				if(!f[j]&&a[j].begin>=e)
					e=a[j].end,f[j]=1;
		}
	printf("%d",ans);
	return 0;
}

猜你喜欢

转载自blog.csdn.net/bigwinner888/article/details/107140861
今日推荐