为什么两个记忆化输出不同(求助大佬)
查看原帖
为什么两个记忆化输出不同(求助大佬)
1098596
2308weibowen楼主2024/9/12 13:54

只用看代码 dfs 记忆化部分,其余部分代码相同。保证输入输出无问题 30分记忆化:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 15
#define int long long

int n , map[MAXN][MAXN] , dp[MAXN][MAXN][MAXN][MAXN];
const int dx[2] = {1 , 0} , dy[2] = {0 , 1};

int dfs (int x1 , int y1 , int x2 , int y2)
{
	int &dpf = dp[x1][y1][x2][y2];
	if(dpf != -1) return dpf;
	if(x1 == n && y1 == n && x2 == n && y2 == n) return dpf = 0;
	for(int i = 0 ; i <= 1 ; i ++)
	{
		int tx = x1 + dx[i] , ty = y1 + dy[i];
		if(tx <= n && tx >= 1 && ty <= n && ty >= 1)
		{
			int mk = map[tx][ty];
			map[tx][ty] = 0;
			dpf = max (dpf , dfs(tx,ty,x2,y2)+mk);
			map[tx][ty] = mk;
		}
		tx = x2 + dx[i] , ty = y2 + dy[i];
		if(tx <= n && tx >= 1 && ty <= n && ty >= 1)
		{
			int mk = map[tx][ty];
			map[tx][ty] = 0;
			dpf = max (dpf , dfs(x1,y1,tx,ty)+mk);
			map[tx][ty] = mk;
		}
	}
	return dpf;
}

sign main()
{
  ...
	while (true)
	{
      ...
	}
	
	cout << dfs(0,1,0,1);
	
	return 0;
}

100分代码

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
#define MAXN 15

int n , map[MAXN][MAXN] , dp[MAXN][MAXN][MAXN][MAXN];
const int dx[2] = {1 , 0} , dy[2] = {0 , 1};

int dfs (int x1 , int y1 , int x2 , int y2)
{
	int &dpf = dp[x1][y1][x2][y2];
	if(dpf != -1) return dpf;
	if(x1 == n && y1 == n && x2 == n && y2 == n) return dpf = 0;
	for(int i = 0 ; i <= 1 ; i ++)
	{
		int tx1 = x1 + dx[i] , ty1 = y1 + dy[i];
		if(tx1 < 1 || tx1 > n || ty1 < 1 || ty1 > n) continue;
		int mk1 = map[tx1][ty1];
		map[tx1][ty1] = 0;
		for(int j = 0 ; j <= 1 ; j ++)
		{
			int tx2 = x2 + dx[j] , ty2 = y2 + dy[j];
			if(tx2 < 1 || tx2 > n || ty2 < 1 || ty2 > n) continue;
			int mk2 = map[tx2][ty2];
			map[tx2][ty2] = 0;
			dpf = max (dpf , dfs (tx1,ty1,tx2,ty2) + mk1 + mk2);
			map[tx2][ty2] = mk2;
		}
		map[tx1][ty1] = mk1;
	}
	return dpf;
}

sign main()
{
    ...
	while (true)
	{
      ...
	}
	
	cout << dfs(0,1,0,1);
	
	return 0;
}

很不理解两篇代码记忆化看着应该是一样的,但A代码没过样例30分

2024/9/12 13:54
加载中...