#救救孩子吧
查看原帖
#救救孩子吧
600706
Ethereal_GG楼主2022/12/30 17:35

#第一个代码:

#include<iostream>
#include<cstring>
using namespace std;
int T;
int n , m;
int G[8][8];
int st[8][8];
int dx[] = {0 , -1 , 1 , 0 , 0 , -1 , -1 , 1 , 1};
int dy[] = {0 , 0 , 0 , -1 , 1 , -1 , 1 , -1 , 1};
int maxn , ans;
void dfs(int x , int y){
	if(y == m + 1){
		dfs(x + 1 , 1);
		return ;
	}
	if(x == n + 1){
		maxn = max(ans , maxn);
		return ;
	}
	dfs(x , y + 1);
	if(!st[x][y]){
		ans += G[x][y];
		for(int i = 1;i <= 8;i++){
			st[x + dx[i]][y + dy[i]] = true;
		}
		dfs(x , y + 1);
		for(int i = 1;i <= 8;i++){
			st[x + dx[i]][y + dy[i]] = false;
		}
		ans -= G[x][y];
	}
}
int main(){
	cin >> T;
	while(T--){
		memset(G , 0 , sizeof(G));
		memset(st , false , sizeof(st));
		cin >> n >> m;
		for(int i = 1;i <= n;i++){
			for(int j = 1;j <= m;j++){
				cin >> G[i][j];
			}
		}
		maxn = 0;
		dfs(1 , 1);
		cout << maxn << endl;
	}
}

#两个WA四个TLE #第二个代码:

#include<iostream>
#include<cstring>
using namespace std;
int T;
int n , m;
int G[8][8];
int st[8][8];
int dx[] = {0 , -1 , 1 , 0 , 0 , -1 , -1 , 1 , 1};
int dy[] = {0 , 0 , 0 , -1 , 1 , -1 , 1 , -1 , 1};
int maxn , ans;
void dfs(int x , int y){
	if(y == m + 1){
		dfs(x + 1 , 1);
		return ;
	}
	if(x == n + 1){
		maxn = max(ans , maxn);
		return ;
	}
	dfs(x , y + 1);
	if(!st[x][y]){
		ans += G[x][y];
		for(int i = 1;i <= 8;i++){
			++st[x + dx[i]][y + dy[i]];
		}
		dfs(x , y + 1);
		for(int i = 1;i <= 8;i++){
			--st[x + dx[i]][y + dy[i]];
		}
		ans -= G[x][y];
	}
}
int main(){
	cin >> T;
	while(T--){
		memset(G , 0 , sizeof(G));
		memset(st , false , sizeof(st));
		cin >> n >> m;
		for(int i = 1;i <= n;i++){
			for(int j = 1;j <= m;j++){
				cin >> G[i][j];
			}
		}
		maxn = 0;
		dfs(1 , 1);
		cout << maxn << endl;
	}
}

#6个点全部AC 大佬们,为啥把赋值改为自加自减就AC了,蒟蒻求救QwQ

2022/12/30 17:35
加载中...