题目描述
机器猫出门斗恶龙了!他需要通过 �n 个关卡。
每个关卡要么是与怪物战斗,扣除一定的血量;要么是营地,给机器猫增加一定的血量。
在旅途中,机器猫任意时刻的血量不能低于或等于 00。问机器猫至少需要多少的初始血量,才能完成任务。
血量为正整数。
输入格式
第一行,一个正整数 n,表示关卡数量。
第二行,共 n 个整数 ai,表示每个关卡。
- 若 ai>0,则表示这个关卡是营地,增加 ai 的血量
- 若 ai<0,则表示这个关卡是战斗,机器猫血量代价为 ai
输出格式
仅一行,一个正整数,表示机器猫需要的初始血量。
输入输出样例
输入 #1
3 -100 -200 -300
输出 #1
601
#include <bits/stdc++.h>
using namespace std;
long long int l = 1;
long long int r = 999999999;
long long int sheng, n, shen;
long long int a[100001];
int f( int i )
{
sheng = i;
shen = sheng;
for( int j = 1; j <= n; j++ )
{
shen = shen + a[j];
if( shen <= 0 )
{
return false;
}
}
if( shen > 0 )
{
return true;
}
}
int main()
{
cin >> n;
for( int i = 1; i <= n; i++ )
{
cin >> a[i];
}
while( l < r )
{
// cout << "[" << l << ", " << r << "]" << endl;
long long int mid = ( l + r ) >> 1;
if( f(mid) == false )
{
l = mid + 1;
}
else
{
r = mid;
}
}
cout << l << endl;
return 0;
}