1. 程式人生 > >1344 走格子 (前綴和)

1344 走格子 (前綴和)

clu gray 初始 pac ++i ace ostream 有一個 ray

有編號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。 Input
第1行:1個數n,表示格子的數量。(1 <= n <= 50000)
第2 - n + 1行:每行1個數A[i],表示格子裏的能量值(-1000000000 <= A[i] <= 1000000000)
Output
輸出1個數,對應從1走到n最少需要多少初始能量。

思路:使用前綴和找出最小值即可
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll num[50000];
int main()
{
    int n;
    ll ans = 0;
    cin >> n;
    for (int i = 0; i < n; ++i) cin >> num[i];
    for (int i = 1; i < n; ++i)num[i] += num[i-1
]; int min = 0; for (int i = 0; i < n; ++i) if (num[min]>num[i])min = i; if (num[min] < 0)cout << (abs(num[min])) << endl; else cout << 0 << endl; }

1344 走格子 (前綴和)