hdu2037-区间贪心问题

问题大意:
选择不相交的区间,数轴上有n个开区间(ai,bi),选择尽量多个区间,使得这些区间两两没有公共点。

这道题在紫皮书p232上有详解,大概做法就是按b1<=b2<=b3……排序,选择第一个区间,然后遍历一遍。证明过程自己看书吧。

写的时候重温了一下运算符重载和优先队列。恩 果然学的不怎么样。

#include 
#include 
#include 
using namespace std;
struct ti
{
    int l,r;
};
bool operator> (ti a, ti b)//按从小到大排
{
    return a.r > b.r;
}
int main()
{
    int m,ans;
    while(scanf("%d",&m) != EOF && m)
    {
        ti one,two;
        priority_queuevector,greater > p; //记得空格
        ans=1;
        for(int i=0; iscanf("%d%d",&one.l,&one.r);
            p.push(one);
        }
        one = p.top();
        p.pop();
        while(!p.empty())
        {
            two = p.top();
            if(two.l >= one.r)
            {
                ans++;
                one = two;
            }
            p.pop();
        }
        printf("%d\n",ans);
    }
    return 0;
}

你可能感兴趣的:(动态规划/贪心/模拟)