// c++输入输出超时
#include <cstdio>
#include <algorithm>
using namespace std;
const int maxn=50005;
int T,n;
int a[maxn];
int l[maxn];
int r[maxn];
int main(){
scanf("%d",&T);
while(T--){
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d",&a[i]);
}
l[0]=a[0];
for(int i=1;i<n;i++){
if(l[i-1]<0){
l[i]=a[i];
}
else{
l[i]=l[i-1]+a[i];
}
}
//此时left[i]为左端包括i的最大子串和
for(int i=1;i<n;i++){
l[i]=max(l[i],l[i-1]);
}
r[n-1]=a[n-1];
for(int i=n-2;i>=0;i--){
if(r[i+1]<0){
r[i]=a[i];
}
else{
r[i]=r[i+1]+a[i];
}
}
for(int i=n-2;i>=0;i--){
r[i]=max(r[i],r[i+1]);
}
int res=-0x3f3f3f3f;
/*for(int i=0;i<n-1;i++){
res=max(res,l[i]+r[i+1]);
}*/
for(int i=1;i<n;i++){
res=max(res,l[i-1]+r[i]);
}
printf("%d\n",res);
}
return 0;
}
poj 2479 Maximum sum
猜你喜欢
转载自blog.csdn.net/skykone1/article/details/88958904
今日推荐
周排行