给出n个开区间(x,y,从中尽可能的选择可能多的开区间,使得这些开区间两两没有交集例如开区间(1,3),(2,4),(3,5),(6,7).,可以最多选出3个区间,(1,3),(3,5),(6,7).
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1100;
struct interv{
int x,y;
} I[maxn];
bool cmp(interv a ,interv b){
if(a.x!=b.x) return a.y<b.y;
return a.x > b.x;
}
int main(){
int x,y,n;
cin>>n;
for(int i=0; i<n;i++){
scanf("%d %d",&I[i].x,&I[i].y);
}
sort(I,I+n,cmp);
int ans=1, lasty=I[0].y;
for(int i=1;i<n;i++){
if(I[i].x >= lasty){
lasty= I[i].y;
ans++;
}
}
cout<<ans;
return 0;
}
结构体,先按x排,然后按y排,下一个x要>=上一个的y ,按x,y较小的排,可以使区间小,从而是区间个数变多,
贪心是用来解决一类最优化问题,并希望局部最优策略来推得全局最优的算法思想