Skip to content

E29940:机器猫斗恶龙

greedy, http://cs101.openjudge.cn/practice/29940/

机器猫出门斗恶龙了!他需要通过 n 个关卡。

每个关卡要么是与怪物战斗,扣除一定的血量;要么是营地,给机器猫增加一定的血量。

在旅途中,机器猫任意时刻的血量不能低于或等于 0。问机器猫至少需要多少的初始血量,才能完成任务。

血量为正整数。

输入

第一行,一个正整数 n,表示关卡数量。

第二行,共 n 个整数 a_i,表示每个关卡。

- 若 a_i>0,则表示这个关卡是营地,增加 a_i 的血量 - 若 a_i<0,则表示这个关卡是战斗,机器猫血量代价为 a_i

所有数据满足 n <= 100000, 1 <= |a_i| <= 1000。

输出

仅一行,一个正整数,表示机器猫需要的初始血量。

样例输入

sample1 input:
3
-100 -200 -300

sample1 output:
601

样例输出

sample2 input:
5
-200 -300 1000 -100 -100

sample2 output:
501

# 机器猫带着 501 点血量出门,两场战斗之后剩下 1,恢复到 1001,两场战斗之后为 801,完成任务。

提示

greedy

来源

https://www.luogu.com.cn/problem/B3628 (TA-tcy)

假设0血入场,累计血量变化的最小值。

python
n = int(input())
a = list(map(int, input().split()))

s = 0
min_s = float('inf')
for num in a:
    s += num
    if s < min_s:
        min_s = s

print(-min_s + 1)