核心思想
典型的贪心算法:
只要满足 第一段时间的尾部时间点 < 第二段时间的头部时间点 就可以了
也就是说:
int t = -1, ans = 0;
for (int i = 0; i < N; i++) {
if (t < v[i].first) {
ans++;
t = v[i].second;
}
}
全部代码如下:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct cards {
int first;
int second;
};
bool cmp(cards v1, cards v2) {
return v2.second > v1.second;
}
cards v[10001];
int N;
int main() {
int n;
cin >> n;
while(n--) {
cin >> N;
for (int i = 0; i < N; i++)
scanf("%d%d", &v[i].first, &v[i].second);
sort(v, v+N, cmp);
int t = -1, ans = 0;
for (int i = 0; i < N; i++) {
if (t < v[i].first) {
ans++;
t = v[i].second;
}
}
printf("%d\n", ans);
}
return 0;
}
2015年9月13日19:42:07