纪中第二天(c组)(2)

题目(2)

John的奶牛们计划要跳到月亮上去。它们请魔法师配制了 P (1 <= P <=150,000)种药水,这些药水必需安原来的先后次序使用,但中间可以跳过一些药水不吃。每种药水有一个“强度”值 s ( 1 <= s <= 500 ),表示可以增强牛的跳跃能力。然而,药力的作用却是交替相反方向起作用,也就是说:当第奇数次吃药时,牛获得跳的更高的能力,而第偶数吃药时,却降低了跳高能力。在吃药前,牛的跳高能力当然为 0 。
   每种药只能吃一次,开始时为第1次吃药。
   请求出牛可能跳到的最高高度--最大跳跃能力。

输入

第一行:一个整数 P
下面P行:每行一个整数,表示按先后次序要吃的药水的“强度”。

输出

只一个整数,表示最大弹跳能力。

样例输入

 8          
 7
 2
 1
 8
 4
 3
 5
 6

样例输出

17

样例解释

去掉第2、4两种药水,
吃药为:
7,1,8,3,6;
最终能力为:
7-1+8-3+6=17

思路

动归。状态转移方程是    a[i][0](奇数次)=max(a[i-1][1](上一次偶数的最大值)+a[i][2](本身高度),a[i-1][0](上一次奇数的最大值))     

                              a[i][1](偶数次)=max(a[i-1][0](上一次奇数的最大值)-a [i][2](本身高度),a[i-1][1](上一次偶数的最大值))

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int a[150001][3],n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>a[i][2];
    a[1][0]=a[1][2];
    for(int i=1;i<=n;i++)
    {
            a[i][0]=max(a[i-1][1]+a[i][2],a[i-1][0]);
            a[i][1]=max(a[i-1][0]-a[i][2],a[i-1][1]);
    }
    cout<<a[n][0];
    return 0;
} 

 

posted on 2019-08-02 16:10  哈弥勒2  阅读(114)  评论(0编辑  收藏  举报

导航