Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)
Total Submission(s): 54 Accepted Submission(s): 36
#include <stdio.h> #include <string.h> #include <algorithm> #include <iostream> using namespace std; #define MAXN 26 int suma[MAXN],sumb[MAXN],pa[MAXN],pb[MAXN],dp[MAXN][MAXN][MAXN][MAXN]; int dfs(int al,int ar,int bl ,int br) { if(dp[al][ar][bl][br]!=-1) return dp[al][ar][bl][br]; dp[al][ar][bl][br]=0; if(al<=ar) dp[al][ar][bl][br]=suma[ar]-suma[al-1]+sumb[br]-sumb[bl-1]-dfs(al+1,ar,bl,br); if(al<=ar) dp[al][ar][bl][br]=max(dp[al][ar][bl][br],suma[ar]-suma[al-1]+sumb[br]-sumb[bl-1]-dfs(al,ar-1,bl,br)); if(bl<=br) dp[al][ar][bl][br]=max(dp[al][ar][bl][br],suma[ar]-suma[al-1]+sumb[br]-sumb[bl-1]-dfs(al,ar,bl+1,br)); if(bl<=br) dp[al][ar][bl][br]=max(dp[al][ar][bl][br],suma[ar]-suma[al-1]+sumb[br]-sumb[bl-1]-dfs(al,ar,bl,br-1)); return dp[al][ar][bl][br]; } int main () { int n,i,tcase; scanf("%d",&tcase); while(tcase--) { scanf("%d",&n); suma[0]=sumb[0]=0; for(i=1;i<=n;i++) { scanf("%d",&pa[i]); suma[i]=suma[i-1]+pa[i]; } for(i=1;i<=n;i++) { scanf("%d",&pb[i]); sumb[i]=sumb[i-1]+pb[i]; } memset(dp,-1,sizeof(dp)); printf("%d\n",dfs(1,n,1,n)); } return 0; }