各位大佬求帮debug,样例过了但wa4个点32分,卡了一个世纪
  • 板块P1123 取数游戏
  • 楼主Sync7
  • 当前回复3
  • 已保存回复3
  • 发布时间2024/4/11 22:08
  • 上次更新2024/4/12 12:42:56
查看原帖
各位大佬求帮debug,样例过了但wa4个点32分,卡了一个世纪
1189998
Sync7楼主2024/4/11 22:08
#include <bits/stdc++.h>
using namespace std;

const int maxN = 6 + 7;
const int maxM = 6 + 7;

int n, m;
int ans;
int sum;

int matrix[maxN][maxM];
int check[maxN][maxM];
int walk[16][2]  = {
					{-2, 0}, {-2, 1}, {-2, 2}, {-1, 2}, 
					{0, 2}, {1, 2}, {2, 2}, {2, 1}, 
					{2, 0}, {2, -1}, {2, -2}, {1, -2},
					{0, -2}, {-1, -2}, {-2, -2}, {-2, -1}
				};

vector<int> res;

void dfs(int r, int c) {
	if (sum > ans) ans = sum;
//	for (int i = 1; i <= n; i ++, puts(""))
//		for (int j = 1; j <= m; j ++)
//			cout << check[i][j] << ' ';
//	cout << sum << endl;
	for (int i = 0; i < 16; i ++) {
		if (check[r + walk[i][0]][c + walk[i][1]]
			|| r + walk[i][0] > n
			|| r + walk[i][0] < 1
			|| c + walk[i][1] > m
			|| c + walk[i][1] < 1
		) continue;
		for (int j = r + walk[i][0] - 1; j <= r + walk[i][0] + 1; j ++)
			for (int k = c + walk[i][1] - 1; k <= c + walk[i][1] + 1; k ++)
				check[j][k] ++;	
		sum += matrix[r + walk[i][0]][c + walk[i][1]];
		dfs(r + walk[i][0], c + walk[i][1]);
		
		for (int j = r + walk[i][0] - 1; j <= r + walk[i][0] + 1; j ++)
			for (int k = c + walk[i][1] - 1; k <= c + walk[i][1] + 1; k ++)
				check[j][k] --;
		sum -= matrix[r + walk[i][0]][c + walk[i][1]];
		
	}
	
}

int main() {
	int t; cin >> t;
	
	while (t --) {
		cin >> n >> m;
		for (int i = 1; i <= n; i ++)
			for (int j = 1; j <= m; j ++)
				cin >> matrix[i][j];
		
		ans = 0;
		for (int i = 1; i <= n; i ++)
			for (int j = 1; j <= m; j ++) {
				memset(check, 0, sizeof(check));
				sum = matrix[i][j];
				for (int k = i - 1; k <= i + 1; k ++)
					for (int l = j - 1; l <= j + 1; l ++)
						check[k][l] ++;	
				dfs(i, j);
			}
		
		res.push_back(ans);
	}
	
	for (int i = 0; i < res.size(); i ++) cout << res[i] << endl;	
} 
2024/4/11 22:08
加载中...