NYOJ_16_矩形嵌套

有点小坑的严格单调递增序列,主要是排序那里坑了一下。

思路:矩形的嵌套?   (a<c&&b<d)||(a<d&&b<c)?  不,只要在建点时保证a<b,条件就会少一个,直接a<c&&b<d就行了

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
struct point
{
 int x,y;
}p[1005]; 
bool cmp(point a,point b)
{
    if(a.x==b.x) //保证最后更新的y一定是最小的
        return a.y>b.y;
    return a.x<b.x;
}
int main()
{
 int t,n,i,j,k,a,b,re[1005][2]; //re[i][j]记录i长度的最小符合点
 scanf("%d",&t);
 while(t--)
 {
     scanf("%d",&n);
     for(i=0;i<n;++i)
     {
         scanf("%d%d",&a,&b);
         if(a>b) swap(a,b); //保证a<b
         p[i].x=a;
         p[i].y=b;
     }
     sort(p,p+n,cmp);
     int count=0; //记录长度
     re[0][0]=0,re[0][1]=0;
     for(i=0;i<n;++i)
         for(j=count;j>=0;--j)
         {
             if(p[i].x>re[j][0]&&p[i].y>re[j][1]) //满足嵌套条件?
             {
                 re[j+1][0]=p[i].x;
                 re[j+1][1]=p[i].y;
                 if(j+1==count+1)
                     count++;
                 break;
             }
         }
         printf("%d\n",count);
 }
 return 0;
}

 

posted @ 2013-05-04 16:55  小仪在努力~  阅读(262)  评论(0编辑  收藏  举报