http://poj.org/problem?id=2533
最长上升子序列,dp
View Code
#include <stdio.h> #include <string.h> #include <stdlib.h> int cmp(const void*a,const void*b) { return *(int*)b-*(int*)a; } int main() { int n,i,j; int a[1100],dp[1100]; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",a+i); for(i=0;i<1100;i++) dp[i]=1; for(i=0;i<n;i++) for(j=0;j<i;j++) if(a[i]>a[j]&&dp[i]<dp[j]+1) dp[i]=dp[j]+1; qsort(dp,n,4,cmp); printf("%d\n",dp[0]); } return 0; }