1. 程式人生 > >51Nod 1344:走格子(貪心)

51Nod 1344:走格子(貪心)

https://www.51nod.com/Challenge/Problem.html#!#problemId=1344

有編號1-n的n個格子,機器人從1號格子順序向後走,一直走到n號格子,並需要從n號格子走出去。機器人有一個初始能量,每個格子對應一個整數A[i],表示這個格子的能量值。如果A[i] > 0,機器人走到這個格子能夠獲取A[i]個能量,如果A[i] < 0,走到這個格子需要消耗相應的能量,如果機器人的能量 < 0,就無法繼續前進了。問機器人最少需要有多少初始能量,才能完成整個旅程。

 

例如:n = 5。{1,-2,-1,3,4} 最少需要2個初始能量,才能從1號走到5號格子。途中的能量變化如下3 1 0 3 7。

輸入

第1行:1個數n,表示格子的數量。(1 <= n <= 50000)
第2 - n + 1行:每行1個數A[i],表示格子裡的能量值(-1000000000 <= A[i] <= 1000000000)

輸出

輸出1個數,對應從1走到n最少需要多少初始能量。

輸入樣例

5
1
-2
-1
3
4

輸出樣例

2

因為能量小於0就無法行動,而初始能量就相當於在每一步上都加上初始能量,所以找出每一步能量最小的地方。

如果這個最小的能量大於0,那麼就不需要初始能量了,否則只要讓初始能量和這個最小能量的和為0即可。

#include<stdio.h>
#define N 50200
long long a[N];
long long max(long long a,long long b )
{
	return a>b?a:b;
}
int main()
{
	int i,n;
	long long sum,mini;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%lld",&a[i]);
	sum=0;
	mini=-99999999;
	for(i=0;i<n;i++)
	{
		sum+=a[i];
		mini=max(-sum,mini);
	}
	if(mini<=0)
		printf("0\n");
	else
		printf("%lld\n",mini);
	return 0;
}