hdu1051二维动规

 1 #include<stdio.h>
 2 int a[100005],b[100005],maxlen[100005];
 3 void sort(int l,int r)
 4 {
 5     int i,j,x,y,x1,y1;
 6     i=l; j=r;
 7     x=a[(i+j)/2]; x1=b[(i+j)/2];
 8     while (i<=j)
 9     {
10         while ((a[i]<x)||(a[i]==x&&b[i]<x1)) i++;
11         while ((x<a[j])||(x==a[j]&&x1<b[j])) j--;
12         if (i<=j)
13         {
14             y=a[i]; a[i]=a[j]; a[j]=y;
15             y=b[i]; b[i]=b[j]; b[j]=y;
16             i++; j--;
17         }
18     }
19     if (l<j) sort(l,j);
20     if (i<r) sort(i,r);
21 }
22 int main()
23 {
24     int t,i,j,n,max;
25     while (~scanf("%d",&t))
26     while (t--)
27     {
28         scanf("%d",&n);
29         for (i=1;i<=n;i++) scanf("%d%d",&a[i],&b[i]);
30         sort(1,n);
31         for (i=1;i<=n;i++)
32         {
33             max=0; 
34             for (j=1;j<i;j++)
35              if (b[j]>b[i]&&maxlen[j]>max) max=maxlen[j];
36             maxlen[i]=max+1; 
37         }
38         max=0;
39         for (i=1;i<=n;i++)
40          if (maxlen[i]>max) max=maxlen[i];
41         printf("%d\n",max); 
42     }
43 }

http://acm.hdu.edu.cn/showproblem.php?pid=1051

posted on 2014-07-16 14:51  xiao_xin  阅读(98)  评论(0)    收藏  举报

导航