3
3 1 2 3
8 4 5 -1 -1 1 -1 -1 5
2 -1 -1
6
14
0
题意:给你n个数,按顺序接成一个环,求环的最大连续和。
题解:求出数列的最大连续和Max以及最小连续和Min,数列总和为sum,ans=max(sum-Min,Max).
#include<set> #include<map> #include<queue> #include<stack> #include<ctime> #include<deque> #include<cmath> #include<vector> #include<string> #include<cctype> #include<cstdio> #include<cstdlib> #include<cstring> #include<sstream> #include<iostream> #include<algorithm> #define REP(i,s,t) for(int i=(s);i<=(t);i++) #define REP2(i,t,s) for(int i=(t);i>=s;i--) using namespace std; typedef long long ll; typedef unsigned long long ull; typedef unsigned long ul; const int N=1000005; int T; int n; int a[N]; int main() { //freopen("test.in","r",stdin); scanf("%d",&T); while(T--) { scanf("%d",&n); int s=0; REP(i,1,n) { scanf("%d",&a[i]); s+=a[i]; } int sum=0,ssum=0; int Max=0,Min=0; REP(i,1,n) { sum+=a[i]; ssum+=a[i]; if(sum<0) { sum=0; } if(sum>Max) { Max=sum; } if(ssum>0) { ssum=0; } if(ssum<Min) { Min=ssum; } } printf("%d\n",max(Max,s-Min)); } return 0; }
原文地址:http://blog.csdn.net/acm_baihuzi/article/details/46369665