题解写给自己看。
题意: 略。
思路: 可以先求不成环的情况下的单链最小值和单链最大值。
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define ll long long
using namespace std;
const int maxn=50010;
int a[maxn];
int main(){
int n;
while(scanf("%d",&n)!=EOF){
ll s=0;
for(int i=1; i<=n; i++){
scanf("%lld",&a[i]);
s+=a[i];
}
ll maxx=0;
ll fmax=-99999999999999;
ll fmin=99999999999999;
for(int i=1; i<=n; i++){
maxx+=a[i];
if(maxx>fmax) fmax=maxx;
if(maxx<0) maxx=0;
}
for(int i=1; i<=n; i++){
maxx+=a[i];
if(maxx<fmin) fmin=maxx;
if(maxx>0) maxx=0;
}
printf("%lld\n",max(fmax,(s-fmin)));
}
return 0;
}