题解 [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< ...
随机推荐
- 这玩意也太猛了!朋友们,我在此严正呼吁大家:端好饭碗,谨防 AI!
你好呀,我是歪歪. 最近几天大火的 ChatGPT 你玩了吗? 如果你不知道它是个什么东西,那么我让它给你来个自我介绍: 说白了,就是一个可以对话的人工智能. 我开始以为就是一个升级版的"小 ...
- python3 利用当前时间、随机数产生一个唯一的数字作为文件名
一.python3 利用当前时间.随机数产生一个唯一的数字作为文件名 代码如下: #-*-coding:utf-8-*- #python3自动生成文件名 from datetime import * ...
- kali2021.4a安装angr(使用virtualenv)
在Linux中安装各种依赖python的软件时,最头疼的问题之一就是各个软件的python版本不匹配的问题,angr依赖python3,因此考虑使用virtualenv来安装angr Virtuale ...
- 编程思想的转变 软件开发目录规范 collections、time、datetime、 random模块
目录 编程思想的转变 软件目录开发规范(重要) 内置模块:collections模块 简介 具名元组 namedtuple 实现二维坐标系 实现扑克牌 队列与堆栈 collection.deque() ...
- JAVA中的注解可以继承吗?
前言 注解想必大家都用过,也叫元数据,是一种代码级别的注释,可以对类或者方法等元素做标记说明,比如Spring框架中的@Service,@Component等.那么今天我想问大家的是类被继承了,注解能 ...
- Qt从实习到搬砖
Qt C++ 工具箱 从零开始的Qt开发之路 里面大概会写一些和Qt相关的内容,也不说是从0开始,感觉Qt做东西和用 C#也差不了很多?也许吧,总之慢慢来,一步一个脚印,直到给它拿下. 2022.5. ...
- python Flask 操作数据库(2)
单表操作 数据准备 from flask import Flask from flask_sqlalchemy import SQLAlchemy class Config: DEBUG = True ...
- texlive编译lshort-zh-cn
项目 lshort-zh-cn是一篇latex的中文文档,本身也是latex编写的. 项目地址:https://github.com/ctex-org/lshort-zh-cn 编译 texlive打 ...
- NOIP-2022游寄
NOIP-2022游寄 Day 1 虽然没有上次去南京CSP-S那么激动,但还是有点小开心的,毕竟能水掉两天课.Phigros重度沉迷患者,推了4个小时的分.坐右前方那哥们好卷,在车上写图论-- JS ...
- 学会了selenium 模拟鼠标操作,你就可以偷懒点点点了
前言 我们在做 Web 自动化的时候,有时候页面的元素不需要我们点击,值需要把鼠标移动上去就能展示各种信息. 这个时候我们可以通过操作鼠标来实现,接下来我们来讲一下使用 selenium 做 Web ...