非上一道站外题。

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int dp[22][22][22][22],p[22],q[22];
int dfs(int a,int b,int c,int d,int sum) {
int maxn=0;
if(a>b&&c>d) return 0;
if(dp[a][b][c][d]) return dp[a][b][c][d];
if(a<=b) {
maxn=max(maxn,sum-dfs(a+1,b,c,d,sum-p[a]));
maxn=max(maxn,sum-dfs(a,b-1,c,d,sum-p[b]));
}
if(c<=d) {
maxn=max(maxn,sum-dfs(a,b,c+1,d,sum-q[c]));
maxn=max(maxn,sum-dfs(a,b,c,d-1,sum-q[d]));
}
dp[a][b][c][d]=maxn;
return maxn;
}
int main() {
int T,n,sum;
scanf("%d",&T);
while(T--) {
sum=0;
scanf("%d",&n);
for(int i=1; i<=n; i++) {
scanf("%d",&p[i]);
sum+=p[i];
}
for(int i=1; i<=n; i++) {
scanf("%d",&q[i]);
sum+=q[i];
}
memset(dp,0,sizeof(dp));
int ans=dfs(1,n,1,n,sum);
printf("%d\n",ans);
}
return 0;
}
求四个 maxn 的赋值语句的含义。