选择不相交区间
来源:互联网 发布:java封装继承多态详解 编辑:程序博客网 时间:2024/05/16 17:28
/****思路:为什么要这样做呢;首先分析一下题意,就是选择尽量多的不相交区间,那么我们就要去掉一些区间,使剩下的区间不相交,那么我们要去掉什么样的区间呢?我们假设区间 [a1,b1],[a2,b2]1,如果a1<a2&&b1>b2,我们说区间1包含区间2,那么我们就要去掉区间1;2,如果a1>a2&&b1>b2, 这时候我们仍然要去掉区间1,因为这样能够是我们选择的时间更多;3,4,3和4 只不过是把a1和a2变变顺序结合一二两点那么算法也就出来了1,首先对区间按照b排序,那么我们只要a2>b1 的也就是变相的去掉了,1,2,哪两种情况*/#include<cstdio>#include<algorithm>#include<iostream>using namespace std;struct Node{ int x,y;}a[10008];bool cmp(Node a,Node b){ return a.y<=b.y;}int main(){ int icase; int n,m; scanf("%d",&icase); while(icase--) { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d%d",&a[i].x,&a[i].y); sort(a,a+n,cmp); int abs = -1; int cn = 0; for(int i=0;i<n;i++) { if(a[i].x>abs){ abs = a[i].y; cn++; } } printf("%d\n",cn); }}