小明在玩升级打怪游戏,这个游戏可以让玩家选择从第i关连续打到第j关(i<=j),每打过一关都会奖励金币或扣除金币。已知每一关奖励或扣除的金币数,小明应该选择从第几关连续打到第几关,才能获得最多金币?请注意小明只能选择一次,当然,没有收获的话可以不选。
输入格式:
输入有两行:
第一行是通关总数n; 第二行是每一关奖励或扣除的金币数(整数表示奖励,负数表示扣除)
输出格式:
输出小明可以获得的最多金币数。
输入样例1:
6
-1 23 -9 14 -2 -1
输出样例1:
28
说明:小明选择从第2关连续打到第4关,获得的总金币数是28,这是最佳的符合规则的选择策略。
输入样例2:
3
-1 -2 -3
输出样例2:
0
说明:每一关都是负数,不玩了。
#include<iostream>
#include<algorithm>
using namespace std;
int a[1005],sum=0,n,maxl,flag;
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
if(a[i]>0)
flag=1;
}
for(int i=0;i<n;i++){
sum+=a[i];
if(sum>maxl)
maxl=sum;
if(sum<0)
sum=0;
}
if(flag)
printf("%d\n",maxl);
else
printf("0\n");
return 0;
}