题解 [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< ...
随机推荐
- python random模块几个常用方法
python random模块几个常用方法 random.random()方法 random.uniform(a, b)方法 random.randint(a, b)方法 random.randran ...
- Windows10下python3和python2同时安装(一)安装python3和python2
Windows10下python3和python2同时安装(一) 安装python3和python2 特别说明,本文是在Windows64位系统下进行的,32位系统请下载相应版本的安装包,安装方法类似 ...
- 预编译SQL为什么能够防止SQL注入
前言 之前我一个搞网络安全的朋友问了我一个的问题,为啥用 PreparedStatement 预编译的 SQL 就不会有被 SQL 注入的风险? 第一时间我联想到的是八股文中关于 Mybatis 的脚 ...
- python与数值计算环境安装
数值计算的编程的软件很多种,也见过一些编程绘图软件的对比. 利用Python进行数值计算,需要用到numpy(矩阵) ,scipy(公式符号), matplotlib(绘图)这些工具包. 1.Linu ...
- python进阶之路4基本运算符、格式化输出
内容回顾 PEP8规范 代码编写规范及美观 python注释语法 平时养成写注释的习惯 1.警号 2.三个单引号 3.三个双引号 常量与变量 1.变量语法结构 变量名 赋值符合 数据值 2.底层原理 ...
- Java进阶篇——springboot2源码探究
1.@EnableAutoConfiguration 除了元注解之外,EnableAutoConfiguration包含了两大重要部分: 1)@AutoConfigurationPackage注解 该 ...
- [C++标准模板库:自修教程与参考手册]关于deque
Deque的基本概念 deque和vector很相似,也提供随机存取的能力,将元素都动态地存储在一个数组中,最大的区别就是:deque的头和尾都是开放的,非常方便在头尾两端进行一些操作.(重点在于:d ...
- 避免用Apache Beanutils进行属性的copy。why?让我们一起一探究竟
在实际的项目开发中,对象间赋值普遍存在,随着双十一.秒杀等电商过程愈加复杂,数据量也在不断攀升,效率问题,浮出水面. 问:如果是你来写对象间赋值的代码,你会怎么做? 答:想都不用想,直接代码走起来,g ...
- BC3-牛牛学说话之-整数
题目描述 牛牛刚刚出生,嗷嗷待哺,一开始他只能学说简单的数字,你跟他说一个整数,他立刻就能学会.输入一个整数,输出这个整数. 输入描述 输入一个整数,范围在32位有符号整数范围内 输出描述 输出这个整 ...
- 使用英特尔 Sapphire Rapids 加速 PyTorch Transformers 模型
大约一年以前,我们 展示 了如何在第三代 英特尔至强可扩展 CPU (即 Ice Lake) 集群上分布式训练 Hugging Face transformers 模型.最近,英特尔发布了代号为 Sa ...