PKU POJ 2181 Jumping Cows DP

题目意思是从数列中选出一个子序列,然后堆该数列依次加一个减一个,最后得到的和最大。
dp[0]记录之前处理过的数中,加一个数后得到的最大值;
dp[1]则是记录减一个数后的最大值。
#include<iostream>
#include <string.h>
#include <string>
using namespace std;
inline int mmax(int a,int b)
{
    return a>b?a:b;
}
int main()
{
    int p,i,s,dp[2];
    while (scanf("%d",&p)!=EOF)
    {
        scanf("%d",&dp[0]);
        dp[1]=0;
        while (--p)
        {
            scanf("%d",&s);
            dp[0]=mmax(dp[0],dp[1]+s);
            dp[1]=mmax(dp[1],dp[0]-s);
        }
        printf("%d\n",mmax(dp[0],dp[1]));

    }
    return 0;
}

 

posted on 2013-03-04 18:13  Deller  阅读(129)  评论(0)    收藏  举报

导航