题解 [HAOI2007]分割矩阵
% 你赛考到了,看到如此之小的数据范围,想到考前每次都被状压 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]分割矩阵的更多相关文章
- BZOJ 1048 [HAOI2007]分割矩阵
1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 623 Solved: 449[Submit][Status ...
- 【BZOJ1048】 [HAOI2007]分割矩阵
[BZOJ1048][HAOI2007]分割矩阵 题面 bzoj 洛谷 题解 \(dp[a][b][c][d][num]\)表示将矩形\((a,b,c,d)\)分成\(num\)个的最小方差,然后转移 ...
- bzoj千题计划186:bzoj1048: [HAOI2007]分割矩阵
http://www.lydsy.com/JudgeOnline/problem.php?id=1048 #include<cmath> #include<cstdio> #i ...
- 洛谷P2217 [HAOI2007]分割矩阵
P2217 [HAOI2007]分割矩阵 题目描述 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n ...
- [BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】
题目链接:BZOJ - 1048 题目分析 感觉这种分割矩阵之类的题目很多都是这样子的. 方差中用到的平均数是可以直接算出来的,然后记忆化搜索 Solve(x, xx, y, yy, k) 表示横坐标 ...
- 【题解】HAOI2007分割矩阵
水题盛宴啦啦啦……做起来真的极其舒服,比某些毒瘤题好太多了…… 数据范围极小 --> 状压 / 搜索 / 高维度dp:观察要求的均方差,开始考虑是不是能够换一下式子.我们用\(a_{x}\)来表 ...
- 1048: [HAOI2007]分割矩阵 - BZOJ
Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了 ...
- [HAOI2007]分割矩阵
题目描述 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了n个矩阵.(每 ...
- BZOJ1048:[HAOI2007]分割矩阵(记忆化搜索DP)
Description 将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此分割(当然也可以只分割其中的一个), 这样分割了(n-1)次后,原矩阵被分割成 ...
- 【记忆化搜索】bzoj1048 [HAOI2007]分割矩阵
标准差=√(Σ(xi-xba)2/n)=Σ(xi)2+xba*n-2*xba*sum.只需最小化每个分割出来的矩阵的平方和即可. #include<cstdio> #include< ...
随机推荐
- 【collection】1.java容器之HashMap&LinkedHashMap&Hashtable
Map源码剖析 HashMap&LinkedHashMap&Hashtable hashMap默认的阈值是0.75 HashMap put操作 put操作涉及3种结构,普通node节点 ...
- Java9-17新特性一览,了解少于3个你可能脱节了
前言 Java8出来这么多年后,已经成为企业最成熟稳定的版本,相信绝大部分公司用的还是这个版本,但是一眨眼今年Java19都出来了,相信很多Java工程师忙于学习工作对新特性没什么了解,有的话也仅限于 ...
- instanceof和Class.isAssignableFrom的区别
1. Class.isAssignableFrom 偶然看见同事写的一段代码是这样的 if( AfterRender.class.isAssignableFrom( assembly.getClass ...
- Docker进阶-Dockerfile建立一个自定义的镜像执行自定义进程
前言 docker对我来说是一个很方便的工具,,上一篇文章也写了docker基本的一些使用,这篇文章重点描述一下Dockerfile的使用,从零建立一个自己定制化的镜像,并可以执行我们需要的任务. 作 ...
- MassTransit 知多少 | 基于MassTransit Courier实现Saga 编排式分布式事务
Saga 模式 Saga 最初出现在1987年Hector Garcaa-Molrna & Kenneth Salem发表的一篇名为<Sagas>的论文里.其核心思想是将长事务拆分 ...
- python前言
目录 一.typora软件以及markdown语法介绍 1.输入标题的两种方法 2.无序列表 3.有序列表 4.在typora里插入多行代码块 5.制作表格 6.表情包 7.链接 8.Typora查看 ...
- 李宏毅机器学习笔记:从0到写AI
part1.基本介绍 1.机器学习的三个任务 一般情况下,我们在机器学习中有三个基本任务,分别是Regression Classification和Structured Regression是计算数值 ...
- 软件工程大作业——“你帮我助”软件开发v2.0
项目简介 在疫情管控期间,很多物资由于信息不对称,不能达成资源的有效分配,尽管这样的事件已经基本不会在新冠疫情的场景中出现,但是开发出一个物品交换的公开信息平台在任何一个社区中都是有必要的,这是构建完 ...
- if-else 的优美写法
前言♂️ 相信大家或多或少都接触过拥有庞大 if else 的项目代码吧,多重嵌套的 if else 在维护的时候真的让人很恼火,有时候一个 bug 排查下来,严重感觉身体被掏空. 本文并未有消灭或 ...
- Vue element 自定义表单验证(验证手机号)
<el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" ...