[POJ 2479](http://poj.org/problem?id=2479%20POJ%202479)
题意: 对一个数列中的两个不相交的子区间A和B 找到两个区间和的最大值S
在DP求最长子段和的时候 维护当前最大和
LEFT[i]为1~i中最大和
RIGHT[i] 为i~n中最大和
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#define sf scanf
#define pf printf
using namespace std;
const int maxn = 50000 + 5;
int num[maxn];
int LEFT[maxn],RIGHT[maxn];
int main(){
int T;
sf("%d",&T);
while( T-- ){
int n;sf("%d",&n);
for(int i = 0;i < n;++i){
sf("%d",&num[i]);
}
int MAX = num[0],sum = 0;
for(int i = 0;i < n;++i){
if(sum < 0){
sum = num[i];
}else sum = sum + num[i];
MAX = max(MAX,sum);
LEFT[i] = MAX;
}
MAX = num[n - 1],sum = 0;
for(int i = n - 1;i >= 0;--i){
if(sum < 0){
sum = num[i];
}else sum = sum + num[i];
MAX = max(MAX,sum);
RIGHT[i] = MAX;
}
int ans = LEFT[0] + RIGHT[1];
for(int i = 0;i < n - 1;++i){
ans = max(ans,LEFT[i] + RIGHT[i + 1]);
}
printf("%d\n",ans);
}
return 0;
}