区间选点问题。数轴上有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;
}