洛谷P1803 线段覆盖 - 贪心

版权声明:本文为博主原创文章,未经博主允许不得转载。 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;
}

猜你喜欢

转载自blog.csdn.net/Fantasy_World/article/details/81987138
今日推荐