会场安排问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
4
-
描述
-
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
这道题和拿到《今年暑假不AC》是一样的道理,都是先按着结束时间来个升序排序,然后再开始找最早结束的那个活动,后面的步骤就和那道题一模一样了,所以,不懂的可以看下我做的那道《今年暑假不AC》,这道题代码如下,也很容易理解(前提是你会做《今年暑假不AC》了,不过如果你也知道贪心的大致思想也可以做出来的:)):
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct Time{
int st,endd;
}p[10005];
bool cmp(Time a,Time b)
{
return a.endd<b.endd;
}
int main()
{
int m;
scanf("%d",&m);
while(m--)
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
scanf("%d%d",&p[i].st,&p[i].endd);
sort(p,p+n,cmp);
int q=p[0].endd;
int ans=1;
for(int i=1;i<n;i++)
{
if(p[i].st>q)
{
ans++;
q=p[i].endd;
}
}
printf("%d\n",ans);
}
return 0;
}