/****思路:
为什么要这样做呢;
首先分析一下题意,就是选择尽量多的不相交区间,那么我们就要去掉一些区间,使剩下
的区间不相交,那么我们要去掉什么样的区间呢?
我们假设区间 [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);
}
}
选择不相交区间
最新推荐文章于 2020-08-24 11:52:26 发布