为什么加了记忆化还是 0 分???
  • 板块P1141 01迷宫
  • 楼主WMY_
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/29 13:28
  • 上次更新2024/7/29 14:43:54
查看原帖
为什么加了记忆化还是 0 分???
1211668
WMY_楼主2024/7/29 13:28
#include <bits/stdc++.h>
using namespace std;

#define LL int64_t

constexpr int N = 1e5 + 5;

const 
	int posX[] = {-1, 1, 0, 0};
	int posY[] = {0, 0, -1, 1};

int n, m;
char maze[1005][1005];
bool f[1005][1005];
int b[1005][1005];

int dfs(int x, int y) {
	if(f[x][y]) return 0;
	f[x][y] = true;
	if(b[x][y] == -1) {
		for(int i = 0; i < 4; i++) {
			if(x + posX[i] >= 1 && x + posX[i] <= n && y + posY[i] >= 1 && y + posY[i] <= n && maze[x][y] != maze[x + posX[i]][y + posY[i]]) {
				if(b[x + posX[i]][y + posY[i]] == -1) b[x + posX[i]][y + posY[i]] = dfs(x + posX[i], y + posY[i]);
				b[x][y] = max(b[x][y], b[x + posX[i]][y + posY[i]]);
			}
    	}
	}
	
	return b[x][y] + 1;
}

// #define FILE_IO

int main(void) {
#ifdef FILE_IO
	ifstream finput("_____.in");
	ofstream fprint("_____.out");
#endif

	cin >> n >> m;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= n; j++)
			cin >> maze[i][j];
	while(m--) {
		memset(b, -1, sizeof(b));
		int x, y;
		cin >> x >> y;
		int ans = dfs(x, y);
		cout << ans << '\n';
		memset(f, false, sizeof(f));
	}

	// system("pause");
	return 0;
}

样例过了,七个 WA 四个 TLE。

2024/7/29 13:28
加载中...