版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Fantasy_World/article/details/81987138
所谓贪心就是局部最优带来全局最优
具体来说就是每次都做看起来会使全局变得更好或至少不变糟的
决策
那么我目前要安排一个区间,若目前有许多区间在允许范围内,我应该选择哪个区间呢
当然是选择右端点最靠左的区间,因为这样后面可能接更多区间,并且应当不再前面是什么,就假设前面的按最优情况都设定好了,下一步该怎么做,因为一道题可能是贪心或者是DP,但要是DP题的话贪心做法可能就会有明显的错误,比较容易看出来贪心可不可行
所以按右端点排序,能接则接
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <map>
using namespace std;
#define debug(x) cerr << #x << "=" << x << endl;
const int MAXN = 1000000 + 10;
struct section{
int l,r;
}sec[MAXN];
int ans,n,nr;
bool cmp(section a, section b) {
return a.r < b.r;
}
int main() {
scanf("%d", &n);
for(int i=1; i<=n; i++) {
scanf("%d %d", &sec[i].l, &sec[i].r);
}
sort(sec+1, sec+n+1, cmp);
nr = sec[1].r;
ans = 1;
for(int i=2; i<=n; i++) {
if(sec[i].l < nr) continue;
nr = sec[i].r;
ans++;
}
printf("%d", ans);
return 0;
}