为什么开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;
}
}