直接看这个就行了,没法再详细了……
再说一句,其实环是不用管的,因为假如一个环是从1到i,再从j到n,要使加和最大,只需令i+1到j-1最小。
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n;
long long s=0,maxsum=0,minsum=1000000000;
int main()
{
scanf("%d",&n);
long long nowma=0,nowmi=0;
for (int i=1;i<=n;++i)
{
int tmp;
scanf("%d",&tmp);
s+=tmp;
nowma+=tmp;
maxsum=max(maxsum,nowma);
if (nowma<0)
nowma=0;
nowmi+=tmp;
minsum=min(nowmi,minsum);
if (nowmi>0)
nowmi=0;
}
printf("%d",maxsum>s-minsum ? maxsum : s-minsum);
return 0;
}