AcWing
  • 首页
  • 课程
  • 题库
  • 更多
    • 竞赛
    • 题解
    • 分享
    • 问答
    • 应用
    • 校园
  • 关闭
    历史记录
    清除记录
    猜你想搜
    AcWing热点
  • App
  • 登录/注册

AcWing 321. 棋盘分割    原题链接    中等

作者: 作者的头像   countryhope ,  2019-10-26 10:00:46 ,  所有人可见 ,  阅读 798


0


1

前缀和预处理,老题就不多说算法了,均方差可以转换一下计算公式,方便计算,直接看代码就行了。

#include <iostream>
#include <cstdio>
#include <cmath>

using namespace std;

const int N = 16,n = 8;

int a[N][N];
double sum[N][N];
double f[N][N][N][N][N];
int m;

int main()
{
    cin >> m;
    for(int i = 1 ; i <= n ; i++)
        for(int j = 1 ; j <= n ; j++)
            cin >> a[i][j] , sum[i][j] = sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1] + a[i][j];
    for(int x1 = 1 ; x1 <= n ; x1++)
        for(int y1 = 1 ; y1 <= n ; y1++)
            for(int x2 = x1;  x2 <= n ; x2++)
               for(int y2 = y1 ; y2 <= n ; y2++)
                   f[0][x1][y1][x2][y2] = (sum[x2][y2] - sum[x2][y1-1] - sum[x1-1][y2] + sum[x1-1][y1-1]) * (sum[x2][y2] - sum[x2][y1-1] - sum[x1-1][y2] + sum[x1-1][y1-1]);

    for(int i = 1 ; i < m ; i++)
        for(int x1 = 1 ; x1 <= n ; x1++)
            for(int y1 = 1 ; y1 <= n ;y1++)
                for(int x2 = x1 ; x2 <= n ;x2++)
                    for(int y2 = y1 ; y2 <= n ; y2++)
                    {
                        double minn = 0x7f7f7f7f;
                        for(int j = x1 ; j < x2 ; j++)
                           minn = min(minn , min(f[i-1][x1][y1][j][y2]+f[0][j+1][y1][x2][y2],f[0][x1][y1][j][y2]+f[i-1][j+1][y1][x2][y2]));
                        for(int k = y1 ; k < y2 ; k++)
                           minn = min(minn , min(f[i-1][x1][y1][x2][k]+f[0][x1][k+1][x2][y2],f[0][x1][y1][x2][k]+f[i-1][x1][k+1][x2][y2]));
                           f[i][x1][y1][x2][y2] = minn;
                    }
    double adv = double(sum[n][n]/m);
    double ans = sqrt(f[m-1][1][1][n][n]/m-adv*adv);
    printf("%.3lf",ans);
    return 0;
}

1 评论


用户头像
未来i   2020-04-03 13:52         踩      回复

用的y总开始讲的那个公式的变形!!谢谢!!!


App 内打开
你确定删除吗?
1024
x

© 2018-2025 AcWing 版权所有  |  京ICP备2021015969号-2
用户协议  |  隐私政策  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标 qq图标
请输入绑定的邮箱地址
请输入注册信息