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; 
}