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