首页 > 试题广场 >

机器人跳跃问题

[编程题]机器人跳跃问题
  • 热度指数:17162 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
机器人正在玩一个古老的基于DOS的游戏。游戏中有N+1座建筑——从0N编号,从左到右排列。编号为0的建筑高度为0个单位,编号为i的建筑的高度为H(i)个单位。 

起初, 机器人在编号为0的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第k个建筑,且它现在的能量值是E, 下一步将跳到第个k+1建筑。将会得到或者失去正比于与H(k+1)与E之差的能量。如果 H(k+1) > E 那么机器人就失去 H(k+1) - E 的能量值,否则它将得到 E - H(k+1) 的能量值。

游戏目标是到达第个N建筑,在这个过程中,能量值不能为负数个单位。现在的问题是机器人以多少能量值开始游戏,才可以保证成功完成游戏?

输入描述:
第一行输入,表示一共有 N 组数据.

第二个是 N 个空格分隔的整数,H1, H2, H3, ..., Hn 代表建筑物的高度


输出描述:
输出一个单独的数表示完成游戏所需的最少单位的初始能量
示例1

输入

5
3 4 3 2 4

输出

4
示例2

输入

3
4 4 4

输出

4
示例3

输入

3
1 6 4

输出

3

备注:
数据约束:
1 <= N <= 10^5
1 <= H(i) <= 10^5
python解法,很直观的思路,这题时间限制比较松,没有优化就全过了
nums = int(input())
heights = list(map(int, input().split()))

power_origin = 0
res = 0

while power_origin >= 0:  # 从零开始寻找最小初始能量
    success = True
    power = power_origin
    for i in range(nums):
        if power > heights[i]:
            power += power - heights[i]
        else:
            power -= heights[i] - power

        if power < 0:
            success = False  # 如果在过程中出现能量为负的情况,直接游戏失败
            break

    if success:
        res = power_origin
        break

    power_origin += 1  # 循环更新

print(res)


发表于 2022-05-03 09:37:12 回复(1)
import math

N = int(input())
H = [0] + [int(x) for x in input().split()]
E = [0] * (N + 1)
for i in range(N, -1, -1):
    E[i-1] = math.ceil((E[i] + H[i]) / 2)
print(E[0])
从后往前模拟,记得向上取整

发表于 2021-03-13 11:45:11 回复(0)
import math
N = int(input())
x = input().split()
E = 0
for i in range(len(x)):
    E = (int(x[len(x)-i-1]) + E)/2
print(math.ceil(E))
发表于 2019-11-28 09:51:35 回复(0)
import math

n = int(input())
H = [int(i) for i in input().split()]
E0 = 0
for i in range(n):
    E0 += H[i] / 2**(i+1)
print(math.ceil(E0))
由题干描述可以得出:
进而归纳得出:
令所有的,则需满足:
求得:
编辑于 2019-08-08 17:03:05 回复(7)
小学数学知识,逆推法(终点处能量最小为0)
import math n = int(input()) h = [0]+list(map(int, input().split())) E = [0]*(n+1) for i in range(n-1,-1,-1):  E[i] = (E[i+1]+h[i+1])*0.5 print(math.ceil(E[0]))


编辑于 2019-06-27 06:02:14 回复(0)