区间不相交问题
给出n个开区间(x,y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。问最多多少个?
区间贪心 (算法笔记 P122)
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=110;
struct interval
{
int x;
int y;
}I[maxn];
bool cmp(interval a,interval b)
{
if(a.x!=b.x) return a.x>b.x;
else return a.y<b.y;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF,n!=0) //逗号运算符
{
for(int i=0;i<n;i++)
{
cin>>I[i].x>>I[i].y;
}
sort(I,I+n,cmp);
int ans=1;
int lastX=I[0].x; //用lastX记录!
for(int i=1;i<n;i++)
{
if(I[i].y<=lastX) //小于等于! 等于也行啊!
{
ans++;
lastX=I[i].x;
}
}
cout<<ans<<endl;
}
return 0;
}