暴搜看看多少分, 结果过了
#include <bits/stdc++.h>
using namespace std;
int n, x, sum[9][9], ans = INT_MAX;
struct pos
{
int x, y;
};
int get(pos x, pos y)
{
int t = sum[y.x][y.y] - sum[y.x][x.y - 1] - sum[x.x - 1][y.y] + sum[x.x - 1][x.y - 1];
return t * t;
}
void dfs(pos x, pos y, int tmp, int dep)
{
if (tmp > ans)
return;
if (dep >= n)
{
ans = min(ans, tmp + get(x, y));
return;
}
for (int i = x.x; i < y.x; ++i)
{
dfs(x, {i, y.y}, tmp + get({i + 1, x.y}, y), dep + 1);
dfs({i + 1, x.y}, y, tmp + get(x, {i, y.y}), dep + 1);
}
for (int j = x.y; j < y.y; ++j)
{
dfs(x, {y.x, j}, tmp + get({x.x, j + 1}, y), dep + 1);
dfs({x.x, j + 1}, y, tmp + get(x, {y.x, j}), dep + 1);
}
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0), cout.tie(0);
cin >> n;
for (int i = 1; i <= 8; ++i)
for (int j = 1; j <= 8; ++j)
{
cin >> x;
sum[i][j] = x + sum[i - 1][j] + sum[i][j - 1] - sum[i - 1][j - 1];
}
dfs({1, 1}, {8, 8}, 0, 1);
cout << ans << '\n';
return 0;
}