#include<iostream>
#include<math.h>
using namespace std;
int a[8][8];
bool b[8][8];
int p,q;
const int d[8][2]={1,0,-1,0,0,1,0,-1,1,1,-1,1,1,-1,-1,-1};
int sum,sm;
int max(int x,int y)
{
return (x > y) ? x : y;
}
void dfs(int m,int n){
if(n == q+1)
{
dfs(m+1,1);
return;
}
if(m == p+1)
{
sum = max(sum,sm);
return;
}
dfs(m,n+1);
if(!b[m][n]){
sm += a[m][n];
for(int i = 0;i < 8;i++){ b[m + d[i][0]][n + d[i][1]] = true;
}
dfs(m,n+1);
sm -= a[m][n];
for( i = 0;i < 8;i++){
b[m + d[i][0]][n + d[i][1]] = false;
}
}
}
int main(){
int n;
cin>>n;
while(n--){
cin>>p>>q;
for(int i = 1;i <= p;i++)
for(int j = 1;j <= q;j++)
cin>>a[i][j];
sum = 0;
dfs(1,1);
cout<<sum<<endl;
}
return 0;
}
这个题 我看的题解大佬的思路模仿着写的
但是 老是不对 实在是想不懂了
望各位大佬指点