选择不相交区间

来源:互联网 发布: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);    }}

原创粉丝点击