原文链接:NYOJ-14-会场安排问题-经典贪心
题目大意:
给出一些活动的起始和终止时间,每次只能执行一个活动,让找出最多能不重叠执行多少个活动。
解题思路:
很经典的一道贪心,一开始脑抽,想着找执行时间最短的,后来写完感觉不太对劲,再仔细想想应该是找终止时间最小的,想通这个之后就很容易。
代码:
#pragma warning(disable : 4996)
#include<iostream>
#include<algorithm>
#include<math.h>
#include<cstring>
#include<string>
#include<vector>
#include<queue>
#include<map>
#include<set>
#define LOCAL
using namespace std;
const int MAXN = 10000 + 10;
struct Activiy {
int b;
int e;
};
bool cmp(const Activiy &x, const Activiy &y) {
return x.e< y.e;
}
Activiy ac[MAXN];
int n,m;
int main()
{
#ifdef LOCAL
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
#endif
cin >> n;
int cnt, pre;
while (n--) {
cin >> m;
for (int i = 0; i < m; i++){
cin >> ac[i].b >> ac[i].e;
}
sort(ac, ac + m, cmp);
cnt = pre = 0;
for (int i = 0; i < m; i++){
if (ac[i].b > pre) {
cnt++;
pre = ac[i].e;
}
}
cout << cnt << endl;
}
return 0;
}