hdu1087 Super Jumping! Jumping! Jumping!

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int n;
long a[1010];
long d[1010];//
int main()
{
    while(scanf("%d",&n),n)
    {
        int i,j;
        for(i=0;i<n;i++)
        {
            scanf("%ld",&a[i]);
            d[i]=a[i];
        }
        long mmax=d[0];
        for(i=1;i<n;i++)
        {
            for(j=0;j<i;j++)
            {
                if(a[i]>a[j]&&d[j]+a[i]>d[i])
                {
                    d[i]=d[j]+a[i];
                }
            }
            if(mmax<d[i])
            {
                mmax=d[i];
            }
        }
        printf("%ld\n",mmax);
    }
    return 0;
}

n^2的复杂度,d[i]记录前i+1个数的最大上升子段的和

posted @ 2012-08-10 18:49  willzhang  阅读(121)  评论(0编辑  收藏  举报