区间选点问题

来源:互联网 发布:golang 协程数量控制 编辑:程序博客网 时间:2024/05/22 01:32

区间选点问题。数轴上有n个闭区间[ai,bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。

贪心策略:

把所有区间按终点从小到大排序(b相同时a从大到小排序),则如果出现区间包含的情况,小区间一定排在前面。第一个区间应该取最后一个点。
参考:http://blog.csdn.net/dgq8211/article/details/7534776
这里写图片描述

代码:

#include <bits/stdc++.h>using namespace std;const int maxn = 1010;struct seg{   int a;   int b;   bool operator < (const seg& S)const   {       return b<S.b || b==S.b && a>S.a;   }}seg[maxn];int main(){    int n;    cin>>n;    for(int i=0;i<n;i++)     cin>>seg[i].a>>seg[i].b;    sort(seg,seg+n);    /*for(int i=0;i<n;i++)        cout<<seg[i].a<<seg[i].b<<endl;*/    int cnt=0;    int e = -(1<<30);    for(int i=0;i<n;i++)    {        if(seg[i].a>e)        {            e=seg[i].b;            cnt++;        }    }    cout<<cnt<<endl;    return 0;}
原创粉丝点击