题意:求一个循环序列的最大连续字串和。
解题思路:考虑两种情况,1)没有穿过数组边界 2)穿过了数组边界。
解题代码:

1 // File Name: e.cpp 2 // Author: darkdream 3 // Created Time: 2015年03月15日 星期日 14时02分10秒 4 5 #include<vector> 6 #include<list> 7 #include<map> 8 #include<set> 9 #include<deque> 10 #include<stack> 11 #include<bitset> 12 #include<algorithm> 13 #include<functional> 14 #include<numeric> 15 #include<utility> 16 #include<sstream> 17 #include<iostream> 18 #include<iomanip> 19 #include<cstdio> 20 #include<cmath> 21 #include<cstdlib> 22 #include<cstring> 23 #include<ctime> 24 #define LL long long 25 26 using namespace std; 27 int a[1000005]; 28 int dp[1000005]; 29 int main(){ 30 int t ; 31 scanf("%d",&t); 32 while(t--) 33 { 34 int n ; 35 scanf("%d",&n); 36 int tmp ; 37 int mi = 0 ; 38 int sum = 0 ; 39 for(int i = 1;i <=n;i ++) 40 { 41 scanf("%d",&a[i]); 42 sum += a[i]; 43 dp[i] = max(dp[i-1],sum); 44 } 45 sum = 0 ; 46 for(int i = 1;i <=n;i ++) 47 { 48 if(sum <= 0 ) 49 sum = 0 ; 50 sum += a[i]; 51 mi = max(mi,sum); 52 } 53 sum = 0 ; 54 for(int i = n;i >= 1;i --) 55 { 56 sum += a[i]; 57 mi = max(sum + dp[i-1],mi) ; 58 } 59 printf("%d ",mi); 60 } 61 return 0; 62 }