马蜂丑,请各位DALAO们见谅
#include <iostream>
#include <queue>
#include <cstring>
using namespace std;
int t;
const int N = 10;
int n,m,a[N][N],ans;
bool v[N][N];
struct Bit
{
int x,y,sum = 0;
bool vis[N][N];
void set()
{ memset(vis,0,sizeof(vis));}
};
queue <Bit> q;
void bfs()
{
while (!q.empty())
{
Bit f = q.front();
q.pop();
int x = f.x,y = f.y,sum = f.sum;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
v[i][j] = f.vis[i][j];
// for(int i = 1;i <= n;i ++,cout << endl)
// for(int j = 1;j <= m;j ++)
// cout << v[i][j] << ' ';
// cout << "x:" << x << "y:" << y << "sum:" << sum << endl;
if (x < 1 || x > n || y < 1 || y > m || v[x][y]) continue;
bool can = 1;
for(int i = -1;i <= 1;i ++)
for(int j = -1;j <= 1;j ++)
v[i + x][j + y] = 1;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
if (v[i][j] == 0 && (i != x || j != y))
can = 0;
if (can == 1)
{
ans = sum;
// cout << "Ok" << endl;
return ;
}
// if (v[x][y]) continue;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
{
Bit tot;
tot.x = i,tot.y = j,tot.sum = sum + a[i][j];
// cout << "tot.x:" << tot.x << "tot.y:" << tot.y << "tot.sum:" << tot.sum;
for(int _i = 1;_i <= n;_i ++)
for(int _j = 1;_j <= m;_j ++)
tot.vis[_i][_j] = v[_i][_j];
q.push({tot});
// cout << "tot.x:" << tot.x << "tot.y:" << tot.y << "tot.sum:" << tot.sum;
}
}
}
void func()
{
ans = 0;
cin >> n >> m;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
cin >> a[i][j];
while (!q.empty()) q.pop();
Bit tot;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
tot.vis[i][j] = 0;
for(int i = 1;i <= n;i ++)
for(int j = 1;j <= m;j ++)
{
tot.x = i,tot.y = j;
q.push({tot});
}
bfs();
cout << ans << endl;
}
int main()
{
ios::sync_with_stdio(0);
cin >> t;
while (t --) func();
return 0;
}