您的位置:首页 > 其它

NYOJ-14:会场安排问题

2013-01-06 20:32 302 查看
描述 学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。

输入第一行是一个整型数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

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 10005
using namespace std;
/*贪心算法,按照节目的最早结束时间来选*/
struct Act
{
int b,e;
};
struct Act act
;
bool Cmp(struct Act a,struct Act b)
{
return a.e<b.e;
}
int main()
{
int n,m;
cin>>m;

while(m--)
{
memset(act,0,sizeof(act));
cin>>n;
int i,cnt,j;
for(i=0;i<n;i++)
scanf("%d%d",&act[i].b,&act[i].e);	//用cin有可能会超时
sort(act,act+n,Cmp);//按结束时间从早到晚排序
cnt = i = 1;
j = 0;	//用以记录当前被选的活动
while(i<n)
{
if(act[j].e<act[i].b)
{
cnt++;	//安排的活动数
j = i;
i++;
}
else i++;
}
cout<<cnt<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: