#include<cmath>//别人的代码 #include<cstdio> #include<cstring> #include<iostream> using namespace std; #define R register inline int read() { char ch=getchar(); int x=0;bool s=1; while(!isdigit(ch)){if(ch=='-')s=0;ch=getchar();} while(isdigit(ch)){x=x*10+ch-'0';ch=getchar();} return s?x:-x; }//快读(这题略卡常) int s[1007]; int f[1007][1007]; int ml[1007][1007]; int mr[1007][1007]; //设ml为固定L端时的min值,mr为固定R端时的max值 void write(int x) { if(x>9)write(x/10); putchar(x%10+'0'); return; }//快写 int main() { //freopen("a.in","r",stdin); int t=read(); while(t--) { int n=read(); for(R int i=1;i<=n;++i) s[i]=s[i-1]+read();//前缀和 for(R int l=1;l<=n;++l) { f[l][l]=s[l]-s[l-1]; ml[l][l]=s[l]+f[l][l];//标记数组,元素下标是什么标记数组下标就是什么 mr[l][l]=s[l-1]-f[l][l]; }//预处理 for(R int len=2;len<=n;++len) for(R int l=1,r=len;r<=n;++l,++r)//枚举区间 { f[l][r]=s[r]-s[l-1]; //mr //for(R int _l=l+1;_l<=r;++_l) //f[l][r]=max(f[l][r],s[_l-1]-s[l-1]-f[_l][r]);//注释掉的是原来的暴力 f[l][r]=max(f[l][r],mr[l+1][r]-s[l-1]); //ml //for(R int _r=r-1;_r>=l;--_r) //f[l][r]=max(f[l][r],s[r]-s[_r]-f[l][_r]); f[l][r]=max(f[l][r],s[r]-ml[l][r-1]); // ml[l][r]=min(ml[l][r-1],s[r]+f[l][r]); mr[l][r]=max(mr[l+1][r],s[l-1]-f[l][r]); } int x=(f[1][n]+s[n])>>1; if(x<0){putchar('-');write(-x);} else write(x); putchar(' '); //输出答案 } return 0; }