站外题求助第二弹
  • 板块学术版
  • 楼主Pratty
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/9/24 21:21
  • 上次更新2024/9/25 09:49:50
查看原帖
站外题求助第二弹
481337
Pratty楼主2024/9/24 21:21

非上一道站外题。

以下是 std:

#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;
}

求四个 maxnmaxn 的赋值语句的含义。

2024/9/24 21:21
加载中...