1002: 小婷婷吃蘑菇
时间限制: 1 Sec 内存限制: 128 MB提交: 353 解决: 159
[提交][状态][讨论版]
题目描述
小婷婷是个吃货, 有一天, 她来到了神奇的魔法谷, 这里有一条单行道路, 小婷婷为了吃到世界上最美味的食物,必须要穿过这条道路。
这是一个长度为 N 的魔法道路,小婷婷需要从 1 走到 N。每个单位长度上有一个蘑菇, 因为小婷婷是个大吃货, 所以她总是控制不住自己, 必须要吃掉在眼前的食物。 但是这些蘑菇受到了魔法的影响,有的可以增加小婷婷的生命,有的可以减少小婷婷的生命。当小婷婷的生命小于 0 时,小婷婷就不能前进, 被召回现实世界了, 现在小婷婷希望大家告诉她,她最少需要有多少初始生命值,才能通过这条魔法道路,吃到世界上最美味的食物?
这是一个长度为 N 的魔法道路,小婷婷需要从 1 走到 N。每个单位长度上有一个蘑菇, 因为小婷婷是个大吃货, 所以她总是控制不住自己, 必须要吃掉在眼前的食物。 但是这些蘑菇受到了魔法的影响,有的可以增加小婷婷的生命,有的可以减少小婷婷的生命。当小婷婷的生命小于 0 时,小婷婷就不能前进, 被召回现实世界了, 现在小婷婷希望大家告诉她,她最少需要有多少初始生命值,才能通过这条魔法道路,吃到世界上最美味的食物?
输入
第 1 行:一个数 N,表示魔法道路的长度。(1 <= N <= 50000)
接下来的 N 行,每行一个数 A[i],表示第 i 个单位上有一个魔法蘑菇,可以对小婷婷的生命增加 A[i](如
果 A[i] > 0,表示小婷婷生命增加 A[i],如果 A[i] < 0,表示小婷婷生命减少 A[i])。
其中-1000000000 <= A[i] <= 1000000000。
接下来的 N 行,每行一个数 A[i],表示第 i 个单位上有一个魔法蘑菇,可以对小婷婷的生命增加 A[i](如
果 A[i] > 0,表示小婷婷生命增加 A[i],如果 A[i] < 0,表示小婷婷生命减少 A[i])。
其中-1000000000 <= A[i] <= 1000000000。
输出
输出小婷婷通过魔法道路的最小初始生命。
样例输入
5
1
-2
-1
3
4
样例输出
2
提示
从前向后,记录最小值,
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define LL long long 5 6 int main() 7 { 8 int n; 9 int i; 10 11 LL sum; 12 LL a; 13 LL mn; 14 15 while (~scanf("%d", &n)) { 16 sum = 0; 17 mn = 0; 18 for (i = 1; i <= n; ++i) { 19 scanf("%lld", &a); 20 sum += a; 21 mn = min(mn, sum); 22 } 23 printf("%lld ", -mn); 24 } 25 26 return 0; 27 }
自己不知道咋想的,从后向前加,方法好像不对啊...
错误代码,
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define LL long long 5 6 const int MAXN = 50000 + 5; 7 8 LL a[MAXN]; 9 10 int main() 11 { 12 int n; 13 int i; 14 LL sum; 15 // LL a; 16 while (~scanf("%d", &n)) { 17 for (i = 1; i <= n; ++i) { 18 scanf("%lld", &a[i]); 19 } 20 for (i = n; i >= 1; --i) { 21 if (a[i] < 0) { 22 break; 23 } 24 } 25 sum = 0; 26 for (; i >= 1; --i) { 27 sum += a[i]; 28 } 29 printf("%lld ", -sum); 30 } 31 32 return 0; 33 }