hdoj 1051 Wooden Sticks(上升子序列个数问题)
View Code
1 #include <iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 typedef struct node 7 { 8 int x,y; 9 int flag; 10 }sut; 11 bool cmp(sut a,sut b) 12 { 13 if(a.x!=b.x) 14 return a.x>=b.x; 15 else 16 return a.y>=b.y; 17 } 18 int main() 19 { 20 int t,n,i,j,num; 21 sut st[5010],hd; 22 scanf("%d",&t); 23 while(t--) 24 { 25 scanf("%d",&n); 26 for(i=0;i<n;i++) 27 { 28 scanf("%d%d",&st[i].x,&st[i].y); 29 st[i].flag=0; 30 } 31 sort(st,st+n,cmp); 32 num=0; 33 for(i=0;i<n;i++) 34 { 35 if(st[i].flag==0) 36 { 37 st[i].flag=1; 38 num++; 39 hd=st[i]; 40 for(j=i+1;j<n;j++) 41 { 42 if(st[j].flag==0&&hd.y>=st[j].y) 43 { 44 st[j].flag=1; 45 hd=st[j]; 46 } 47 } 48 } 49 } 50 printf("%d\n",num); 51 } 52 return 0; 53 }