% 你赛考到了,看到如此之小的数据范围,想到考前每次都被状压 dp 吊起来打的惨痛经历,第一反应就是状压。

然后发现横竖切这个不太好记录就摆了去看 T2,然后没想到这么简单。


令 \(f_{a, b, c, d, k}\) 为左上角坐标为 \((a, b)\) 右下角坐标为 \((c, d)\) 的切成 \(k\) 个的方案数 \(\sum\limits (x_i - \bar{x})^2\) 最小值。不除以 \(n\) 然后开根是因为 \(n\) 是定值开根不会对大小造成影响。

考虑转移,以行为例,我们每次要枚举要切的那一条线以及给每个矩阵分配的块数,显而易见是 \(f_{a, b, c, d, k} = \min\limits_{j = 1}^{k - 1}\{f_{a, b, i, d, j} + f_{i + 1, b,c, d, k - j}\}\) 其中 \(i\) 是任意 \([a, c)\) 里面的整数,代表我们切的线。

列同理。

考虑边界问题,当 \(k = 1\) 时就返回这个矩阵所有数字之和减去平均数的平方,平均数是个定值。

然后就记忆化搜索。

总的来说这题并不大难 qwq

然后还在往状压想并且摆烂题目的 SX 是屑(悲

//SIXIANG
#include <iostream>
#include <cmath>
#include <iomanip>
#define MAXN 100000
#define QWQ cout << "QWQ" << endl;
using namespace std;
double f[20][20][20][20][20];
double a[20][20], sum[20][20];
double chu = 0;
int k, n, m; double sq(double x) {
return x * x;
}
double ss(int a, int b, int c, int d) {
return sum[c][d] - sum[a - 1][d] - sum[c][b - 1] + sum[a - 1][b - 1];
}
double pika(int a, int b, int c, int d, int k) {
if(k == 1) return sq(ss(a, b, c, d) - chu);
if(f[a][b][c][d][k]) return f[a][b][c][d][k];
double minn = 1145141919;
for(int p = a; p < c; p++)
for(int j = 1; j < k; j++)
minn = min(minn, pika(a, b, p, d, j) +
pika(p + 1, b, c, d, k - j));
for(int p = b; p < d; p++)
for(int j = 1; j < k; j++)
minn = min(minn, pika(a, b, c, p, j) +
pika(a, p + 1, c, d, k - j));
f[a][b][c][d][k] = minn;
return minn;
}
int main() {
cin >> n >> m >> k;
for(int p = 1; p <= n; p++)
for(int i = 1; i <= m; i++)
cin >> a[p][i];
int rest = 0;
for(int p = 1; p <= n; p++) {
rest = 0;
for(int i = 1; i <= m; i++)
rest += a[p][i], sum[p][i] = (sum[p - 1][i] + rest);
}
chu = sum[n][m] / (double(k));
cout << fixed << setprecision(2) << sqrt(pika(1, 1, n, m, k) / double(k)) << endl;
}

题解 [HAOI2007]分割矩阵的更多相关文章

  1. BZOJ 1048 [HAOI2007]分割矩阵

    1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 623  Solved: 449[Submit][Status ...

  2. 【BZOJ1048】 [HAOI2007]分割矩阵

    [BZOJ1048][HAOI2007]分割矩阵 题面 bzoj 洛谷 题解 \(dp[a][b][c][d][num]\)表示将矩形\((a,b,c,d)\)分成\(num\)个的最小方差,然后转移 ...

  3. bzoj千题计划186:bzoj1048: [HAOI2007]分割矩阵

    http://www.lydsy.com/JudgeOnline/problem.php?id=1048 #include<cmath> #include<cstdio> #i ...

  4. 洛谷P2217 [HAOI2007]分割矩阵

    P2217 [HAOI2007]分割矩阵 题目描述 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n ...

  5. [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】

    题目链接:BZOJ - 1048 题目分析 感觉这种分割矩阵之类的题目很多都是这样子的. 方差中用到的平均数是可以直接算出来的,然后记忆化搜索 Solve(x, xx, y, yy, k) 表示横坐标 ...

  6. 【题解】HAOI2007分割矩阵

    水题盛宴啦啦啦……做起来真的极其舒服,比某些毒瘤题好太多了…… 数据范围极小 --> 状压 / 搜索 / 高维度dp:观察要求的均方差,开始考虑是不是能够换一下式子.我们用\(a_{x}\)来表 ...

  7. 1048: [HAOI2007]分割矩阵 - BZOJ

    Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...

  8. [HAOI2007]分割矩阵

    题目描述 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了n个矩阵.(每 ...

  9. BZOJ1048:[HAOI2007]分割矩阵(记忆化搜索DP)

    Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个), 这样分割了(n-1)次后,原矩阵被分割成 ...

  10. 【记忆化搜索】bzoj1048 [HAOI2007]分割矩阵

    标准差=√(Σ(xi-xba)2/n)=Σ(xi)2+xba*n-2*xba*sum.只需最小化每个分割出来的矩阵的平方和即可. #include<cstdio> #include< ...

随机推荐

  1. 多种方法实现单例模式 pickle模块

    目录 单例模式 类方法@classmethod实现 元类实现 模块实现 装饰器实现 双下call.反射实现 pickle序列化模块 单例模式 比如系统调用打印机,不管你要打印几次,都是调用同一个打印机 ...

  2. Vue快速上门(3)-组件与复用

    VUE家族系列: Vue快速上门(1)-基础知识 Vue快速上门(2)-模板语法 Vue快速上门(3)-组件与复用 01.component组件 1.1.component基础知识 组件是可以复用的V ...

  3. RocketMQ Schema——让消息成为流动的结构化数据

    本文作者:许奕斌,阿里云智能高级研发工程师. Why we need schema RocketMQ 目前对于消息体没有任何数据格式的约束,可以是 JSON ,可以是对象 toString ,也可以只 ...

  4. 【转载】MSSQL汉字首字母查询处理自定义函数

    -- 汉字首字母查询处理用户定义函数 CREATE FUNCTION f_GetPY(@str nvarchar(4000)) RETURNS nvarchar(4000) AS BEGIN DECL ...

  5. 发布了一个jar包到中央仓库,我的心好累…

    原创:微信公众号 码农参上,欢迎分享,转载请保留出处. 哈喽大家好啊,我是Hydra. 前几天我在网上冲浪的时候,看见有一个老铁在git上给我提了一个issue: 万万没想到,有一天我写的烂代码居然也 ...

  6. [C++Primer] 第二章 变量和基本类型

    第二章 变量和基本类型 引用 引用定义的时候必须初始化. 引用初始化之后无法重新绑定到其它对象上. 引用本身并不是对象,所以没有指向引用的引用(不管如何多层引用,引用的还是源对象) 下面用一个简单的例 ...

  7. [LeetCode]对角线遍历

    题目 代码 class Solution { public: vector<int> findDiagonalOrder(vector<vector<int>>&a ...

  8. 分布式拒绝服务攻击(DDoS)和僵尸网络(Botnet)

    DDos和僵尸网络是相辅相成的两种攻击手段,本文仅介绍基本概念,详细请查看文末参考资料. 分布式拒绝服务攻击(DDoS) 分布式拒绝服务攻击DDoS是一种基于DoS的特殊形式的拒绝服务攻击,是一种分布 ...

  9. 脱坑记录--- removeEventListener 移除事件监听失败的经历--vue--keep-alive-----完美实现echarts自适应屏幕~~~~

    下面开始讲述事情经过~~~~ 页面代码是这样的 <template> <page-view :title="title"> <div id=" ...

  10. OpenMP 线程同步 Construct 实现原理以及源码分析(上)

    OpenMP 线程同步 Construct 实现原理以及源码分析(上) 前言 在本篇文章当中主要给大家介绍在 OpenMP 当中使用的一些同步的 construct 的实现原理,如 master, s ...