hdu2037-区间贪心问题

来源:互联网 发布:php 笛卡尔乘积 编辑:程序博客网 时间:2024/06/06 03:31

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

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

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

#include <iostream>#include <cstdio>#include <queue>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_queue<ti,vector<ti>,greater<ti> > p; //记得空格        ans=1;        for(int i=0; i<m; i++)        {            scanf("%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;}