求助,死循环
查看原帖
求助,死循环
561529
Infinite_Energy楼主2022/7/13 15:46
#include<bits/stdc++.h>
using namespace std;
long long t,n,m,a[10][10],ans=-114514,sum,flag[10][10];
long long dx[8]={-1,-1,-1,0,1,1,1,0};
long long dy[8]={-1,0,1,1,1,0,-1,-1};
void dfs(long long x,long long y){
	if(y>m){
		dfs(x+1,1);
		return;
	}
	if(x>n){
		ans=max(ans,sum);
		return;
	}
	dfs(x,y+1);
	if(flag[x][y]==0){
		sum+=a[x][y];
		for(int k=0;k<=7;k++){
			long long xx=dx[k]+x;
			long long yy=dy[k]+y;
			if(xx>=1&&xx<=n&&yy>=1&&yy<=m){
				flag[xx][yy]++;
			}
		}
		dfs(x,y+1);
		for(int k=0;k<=7;k++){
			long long xx=dx[k]+x;
			long long yy=dy[k]+y;
			if(xx>=1&&xx<=n&&yy>=1&&yy<=m){
				flag[xx][yy]--;
			}
		}
		sum-=a[x][y];
	}
}
int main(){
	cin>>t;
	while(t--){
		cin>>n>>m;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				flag[i][j]=0;
			}
		}
		sum=0;
		ans=-114514;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				cin>>a[i][j];
			}
		}
		dfs(1,1);
		cout<<ans<<endl; 
	}
	return 0;
}
2022/7/13 15:46
加载中...