@994495jj
2017-09-11T02:08:05.000000Z
字数 994
阅读 771
201709
#include<bits/stdc++.h>using namespace std;#define fi first#define se second#define mp make_pair#define pb push_back#define rep(i, a, b) for(int i=(a); i<(b); i++)#define sz(a) (int)a.size()#define de(a) cout<<#a<<" = "<<a<<endl#define dd(a) cout<<#a<<" = "<<a<<" "typedef long long ll;typedef pair<int, int> pii;typedef vector<int> vi;//-----const int N=20001;const int M=160;int n;int sum[N],f[N][M][2];int main(){int T;scanf("%d",&T);while(T--) {///scanf("%d",&n);///initmemset(f,0,sizeof(f));///readrep(i,1,n+1) scanf("%d",&sum[n+1-i]);///get sumrep(i,1,n+1) sum[i]=sum[i]+sum[i-1];///solverep(i,0,n+1) {for(int k=0;(1+k)*k/2<=(n-i)+2&&i>=k;++k) {if(k>=M) {de(i);de(k);}rep(x,0,2) {int r1=f[i-k][k][1-x];int t1=sum[i]-sum[i-k];int res=0;if(x) {res=r1-t1;} else {res=r1+t1;}if(i>=k+1) {int r2=f[i-(k+1)][k+1][1-x];int t2=sum[i]-sum[i-(k+1)];if(x) {res=min(res,r2-t2);} else {res=max(res,r2+t2);}}f[i][k][x]=res;}}}printf("%d\n",f[n][1][0]);}return 0;}
