测评机蒸蒸日上
查看原帖
测评机蒸蒸日上
1305692
xiangixuan楼主2025/1/17 20:07

暴搜看看多少分, 结果过了

#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;
}
2025/1/17 20:07
加载中...