http://acm.hdu.edu.cn/showproblem.php?pid=1087
求最长上升子序列问题
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),n) { for(i=0;i<n;i++) scanf("%d",a+i); for(i=0;i<1100;i++) dp[i]=a[i]; for(i=0;i<n;i++) for(j=0;j<i;j++) if(a[i]>a[j]&&dp[i]<dp[j]+a[i]) dp[i]=dp[j]+a[i]; qsort(dp,n,4,cmp); printf("%d\n",dp[0]); } return 0; }