机器人跳跃问题

机器人正在玩一个古老的基于 D O S DOS DOS的游戏。

游戏中有 N + 1 N+1 N+1座建筑——从 0 0 0 N N N编号,从左到右排列。

编号为0的建筑高度为 0 0 0个单位,编号为 i i i 的建筑高度为 H ( i ) H(i) H(i)个单位。

起初,机器人在编号为 0 0 0的建筑处。

每一步,它跳到下一个(右边)建筑。

假设机器人在第 k k k个建筑,且它现在的能量值是 E E E,下一步它将跳到第 k + 1 k+1 k+1个建筑。

如果 H ( k + 1 ) > E H(k+1)>E H(k+1)>E,那么机器人就失去 H ( k + 1 ) − E H(k+1)-E H(k+1)E的能量值,否则它将得到 E − H ( k + 1 ) E-H(k+1) EH(k+1)的能量值。

游戏目标是到达第 N N N个建筑,在这个过程中能量值不能为负数个单位。

现在的问题是机器人至少以多少能量值开始游戏,才可以保证成功完成游戏?

输入格式
第一行输入整数 N N N

第二行是 N N N个空格分隔的整数, H ( 1 ) , H ( 2 ) , … , H ( N ) H(1),H(2),…,H(N) H(1),H(2),,H(N)代表建筑物的高度。

输出格式
输出一个整数,表示所需的最少单位的初始能量值上取整后的结果。

数据范围
1 ≤ N , H ( i ) ≤ 1 0 5 , 1≤N,H(i)≤10^5, 1N,H(i)105,

输入样例1:

5
3 4 3 2 4

输出样例1:

4

输入样例2:

3
4 4 4

输出样例2:

4

输入样例3:

3
1 6 4

输出样例3:

3
  1. 思路
    H 0 , H 1 , H 2 , H 3 , H 4 , H 5 H_0,H_1,H_2,H_3,H_4,H_5 H0,H1,H2,H3,H4,H5

H 4 , H 5 H_4,H_5 H4,H5
E − ( H 5 − E ) = 0 E-(H_5-E)=0 E(H5E)=0
E = H 5 2 E=\dfrac{H_5}{2} E=2H5

H 3 , H 4 H_3,H_4 H3,H4
E − ( H 4 − E ) = H 5 2 E-(H_4-E)=\dfrac{H_5}{2} E(H4E)=2H5
E = H 4 + H 5 2 2 E=\dfrac{H_4+\dfrac{H_5}{2}}{2} E=2H4+2H5

#include <bits/stdc++.h>

using namespace std;
const int maxn=1e5+10;
int n;
int h[maxn];
int res;

int main() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) {
        scanf("%d", &h[i]);
    }
    for (int i = n; i >= 1; i--) {
        if ((h[i] + res) % 2 == 0) {
            res = (h[i] + res) / 2;
        } else {
            res = (h[i] + res) / 2 + 1;
        }
    }
    printf("%d\n", res);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值