NYOJ 問題14 會場安排問題(結構體+貪心)

會場安排問題

時間限制:3000 ms  |  內存限制:65535 KB
難度:4
描述
學校的小禮堂每天都會有許多活動,有時間這些活動的計劃時間會發生衝突,需要選擇出一些活動進行舉辦。小劉的工作就是安排學校小禮堂的活動,每個時間最多安排一個活動。現在小劉有一些活動計劃的時間表,他想儘可能的安排更多的活動,請問他該如何安排。
輸入
第一行是一個整型數m(m<100)表示共有m組測試數據。
每組測試數據的第一行是一個整數n(1<n<10000)表示該測試數據共有n個活動。
隨後的n行,每行有兩個正整數Bi,Ei(0<=Bi,Ei<10000),分別表示第i個活動的起始與結束時間(Bi<=Ei)
輸出
對於每一組輸入,輸出最多能夠安排的活動數量。
每組的輸出佔一行
樣例輸入
2
2
1 10
10 11
3
1 10
10 11
11 20
樣例輸出
1
2
提示
注意:如果上一個活動在t時間結束,下一個活動最早應該在t+1時間開始
來源
經典題目
上傳者

張雲聰


題目鏈接

代碼:

#include<cstdio>
#include<algorithm>
#include<iostream>
using namespace std ;
struct act{
	int begin;
	int end;
}activity[10005];
bool cmp(act a,act b)
{
	return a.end<b.end;
}//按活動結束時間從小到大排序
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		for(int i=0;i<n;i++)
		{
			scanf("%d%d",&activity[i].begin,&activity[i].end);
		 } 
		sort(activity,activity+n,cmp);
		int ans=1;
		int en=activity[0].end;
		for(int i=1;i<n;i++)
		{
			if(activity[i].begin>en) 
			{
			ans++;
			en=activity[i].end;
			}
		}
		cout<<ans<<endl;
	}
	return 0;
}        




發佈了40 篇原創文章 · 獲贊 51 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章