题目来源:http://acm.nyist.net/JudgeOnline/problem.php?pid=14
会场安排问题
-
描述
-
学校的小礼堂每天都会有许多活动,有时间这些活动的计划时间会发生冲突,需要选择出一些活动进行举办。小刘的工作就是安排学校小礼堂的活动,每个时间最多安排一个活动。现在小刘有一些活动计划的时间表,他想尽可能的安排更多的活动,请问他该如何安排。
看起来应该是个简单的贪心问题
首先按结束时间排序,然后遍历 满足条件就累计一个活动 ac了
1556069 | PandaLHC | 会场安排问题 | ![]() | 92 | 316 | C/C++ | 04-27 09:46:30 |
代码简单
# include <iostream>
# include <algorithm>
# include <stdio.h>
using namespace std;
#define MAX 10000
struct act{
int begin, end;
}actArray[MAX];
int cmp(act a, act b)
{
return a.end < b.end;
}
int main()
{
int m;
freopen("in.txt", "r", stdin);
scanf("%d", &m);
while(m--){
int n, j, s;
scanf("%d", &n);
for(int i = 0; i < n; i++){
scanf("%d %d", &actArray[i].begin, &actArray[i].end);
}
sort(actArray, actArray + n, cmp);
j = 0; s = 1;
for(int i = 1; i < n; i++){
if(actArray[i].begin > actArray[j].end){
s++;
j = i;
}
}
printf("%d\n", s);
}
return 0;
}