andre_joy

导航

hdu 1087

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1087

题意:只能走比当前旗子大的旗子,不能回头,求走过最大的旗子的和。

mark:简单dp。

代码:

#include <stdio.h>
#include <string.h>

int main()
{
    int n,a[1010],dp[1010][2];
    int i,j,max;
    while(scanf("%d", &n), n)
    {
        memset(dp, 0, sizeof(dp));
        for(i = 0; i < n; i++)
            scanf("%d", a+i);
        for(i = max = 0; i < n; i++)
        {
            dp[i][0] = dp[i][1] = a[i];
            for(j = 0; j < i; j++)
                if(dp[j][0] < dp[i][0])
                    if(dp[i][1] < dp[j][1]+a[i]) dp[i][1] = dp[j][1]+a[i];
            if(max < dp[i][1]) max = dp[i][1];
        }
        printf("%d\n", max);
    }
    return 0;
}

posted on 2012-07-10 22:56  andre_joy  阅读(465)  评论(0编辑  收藏  举报