~~要不参考一下这个~~
```cpp
#include <bits/stdc++.h>
using namespace std;
int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1},s[8][8],q[8][8];
int t,n,m,ans,maxn=-1;
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(q[x][y]==0){
ans+=s[x][y];
for(int i=0;i<=7;i++){
q[x+d[i][0]][y+d[i][1]]++;
}
dfs(x,y+1);
for(int i=0;i<=7;i++){
q[x+d[i][0]][y+d[i][1]]--;
}
ans-=s[x][y];
}
}
int main(){
cin>>t;
while(t--){
ans=0;
memset(s,0,sizeof(s));
memset(q,0,sizeof(q));
cin>>n>>m;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>s[i][j];
}
}
dfs(1,1);
cout<<maxn<<endl;
maxn=-1;
}
return 0;
}
```
by jumping @ 2023-09-13 23:30:15
@[sxshm](/user/719225) 我也错了,三个$\texttt{TLE}$
by INT_1024 @ 2023-09-14 20:22:44
对啊,T^T
by sxshm @ 2023-09-15 13:29:02
现在我改过了,代码如下
```cpp
#include<bits/stdc++.h>
int t,n,m;
int a[10][10];
int vis[10][10];
int dx[]={0,1,-1,0,1,1,-1,-1};
int dy[]={-1,0,0,1,-1,1,1,-1};
int mx,ans;
void dfs(int x,int y){
if(y>m){
dfs(x+1,1);
return ;
}
if(x>n){
mx=max(mx,ans);
return ;
}
dfs(x,y+1);
if(vis[x][y]==0){
ans+=a[x][y];
for(int i=0;i<8;i++) vis[x+dx[i]][y+dy[i]]++;
dfs(x,y+1);
for(int i=0;i<8;i++) vis[x+dx[i]][y+dy[i]]--;
ans-=a[x][y];
}
}
int main(){
scanf("%d",&t);
while(t--){
mx=ans=0;
memset(a,0,sizeof a);
memset(vis,false,sizeof vis);
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&a[i][j]);
dfs(1,1);
printf("%d\n",mx);
}
return 0;
}//不要抄代码,不然有意想不到的结果
```
by sxshm @ 2023-09-15 13:32:14