求助
  • 板块P1123 取数游戏
  • 楼主yby0516
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/31 11:25
  • 上次更新2023/12/31 14:28:03
查看原帖
求助
648072
yby0516楼主2023/12/31 11:25

为什么开O2就会爆0

#include<bits/stdc++.h>

using namespace std;
int t,ans=0;
int a[8][8],pd[8][8],dx[8]={0,1,0,-1,-1,1,-1,1},dy[8]={1,0,-1,0,1,1,-1,-1};
int n,m,maxn=0;
void dfs(int x,int y)
{
	if(y==m)
	{
		dfs(x+1,0);
		return;
	}
	if(x==n)
	{
		ans=max(ans,maxn);
		return;
	}
	dfs(x,y+1);
	if(!pd[x][y])
	{
		maxn+=a[x][y];
		for(int i=0;i<8;i++)
		{
			int nx=x+dx[i],ny=y+dy[i];
			pd[nx][ny]++;
		}
	
		 dfs(x,y+1);
		 for(int i=0;i<8;i++)
		{
			int nx=x+dx[i],ny=y+dy[i];
			pd[nx][ny]--;
		}
		
		maxn-=a[x][y];
	}
}
int main()
{
	cin>>t;
	for(int i=1;i<=t;i++)
	{
		cin>>n>>m;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			cin>>a[i][j];
		}
		dfs(0,0);
		if(i!=t)
		cout<<ans<<endl;
		else cout<<ans;
		ans=0,maxn=0;
	}
	
} 

2023/12/31 11:25
加载中...