#include <iostream>
#include <string.h>
using namespace std;
int a[10][10];
bool vis[10][10];
int dx[8] = {1, -1, 0, 0, 1, -1, 1, -1};
int dy[8] = {0, 0, 1, -1, 1, 1, -1, -1};
int ans, maxx;
int n, m;
void dfs(int x, int y)
{
if (y == m + 1)
{
dfs(x + 1, 1);
return ;
}
if (x == n + 1)
{
maxx = max(ans, maxx);
return ;
}
dfs(x, y + 1);
if (!vis[x][y])
{
ans += a[x][y];
for (int i = 0;i < 8;++i)
{
vis[x + dx[i]][y + dy[i]] = true;
}
dfs(x, y + 1);
ans -= a[x][y];
for (int i = 0;i < 8;++i)
{
vis[x + dx[i]][y + dy[i]] = false;
}
}
}
int main()
{
int T;
cin >> T;
while (T--)
{
memset(a, 0, sizeof(a));
memset(vis, 0, sizeof(vis));
cin >> n >> m;
for (int i = 1;i <= n;++i)
{
for (int j = 1;j <= m;++j)
{
cin >> a[i][j];
}
}
maxx = 0;
dfs(1, 1);
cout << maxx << endl;
}
return 0;
}
输入
3
4 4
67 75 63 10
29 29 92 14
21 68 71 56
8 67 91 25
2 3
87 70 85
10 3 17
3 3
1 1 1
1 99 1
1 1 1
正确输出
271
172
99
我的输出
690
182
103