51Nod 1344:走格子(貪心)
阿新 • • 發佈:2018-12-06
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; }