求助,感觉思路对,不知为何出错
查看原帖
求助,感觉思路对,不知为何出错
1238574
dzy15373891653楼主2024/8/19 21:59
#include<iostream>
#include<cstring>
using namespace std;
const int N=11;
int t,n,m,a[N][N],ans,maxx,xx[10]={1,0,0,-1,1,-1,-1,1},yy[10]={0,1,-1,0,1,1,-1,-1};
bool vis[N][N];
void dfs(int i,int j,int sum)
{
	if(j==m+1)
	{
	//	cout<<sum<<endl;
		dfs(i+1,1,sum);
		return ;
	}
	if(i==n+1)
		{
		//	cout<<ans<<'\n';
			ans=max(ans,sum);
			return ;
		}
	dfs(i,j+1,sum);
	if(vis[i][j]==0)
	{
		for(int k=0;k<8;k++)
		{
			vis[i+xx[k]][j+yy[k]]=true;
		}
		dfs(i,j+1,sum+a[i][j]);
		for(int k=0;k<8;k++)
		{
			vis[i+xx[k]][j+yy[k]]=false;
		}
		sum-=a[i][j];
	}
}
int main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		memset(vis,0,sizeof(vis));
		memset(a,0,sizeof(a));
		cin>>n>>m;
		for(int j=1;j<=n;j++)
		{
			for(int z=1;z<=m;z++)
			{
				cin>>a[j][z];
			}
		}
		ans=0;
		dfs(1,1,0);
		cout<<ans<<'\n';
	}
	return 0;
}
2024/8/19 21:59
加载中...