题目链接:BZOJ - 1048

题目分析

感觉这种分割矩阵之类的题目很多都是这样子的。

方差中用到的平均数是可以直接算出来的,然后记忆化搜索 Solve(x, xx, y, yy, k) 表示横坐标范围 [x, xx], 纵坐标范围 [y, yy] 的矩阵切成 k 块的最小 sigma((Vi - Ave)^2) 。

然后再递归将矩阵分得更小,直到 k 为 1 的时候直接返回相应的值。

代码

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <cstdio>using namespace std;const int MaxN = 15 + 5, MaxT = 15 + 5;int n, m, t, Num;
int Sum[MaxN][MaxN];typedef double DB;const DB INF = 999999999;DB Ave;
DB f[MaxN][MaxN][MaxN][MaxN][MaxT];DB Get(int x, int y, int xx, int yy) {return (DB)(Sum[xx][yy] - Sum[x - 1][yy] - Sum[xx][y - 1] + Sum[x - 1][y - 1]);
}inline DB Sqr(DB x) {return x * x;}
inline DB gmin(DB a, DB b) {return a < b ? a : b;}DB Solve(int x, int xx, int y, int yy, int k) {if (f[x][xx][y][yy][k] != -1) return f[x][xx][y][yy][k];if (k == 1) return f[x][xx][y][yy][k] = Sqr(Get(x, y, xx, yy) - Ave);DB ret = INF;for (int i = x; i <= xx - 1; ++i)for (int j = 1; j <= k - 1; ++j)ret = gmin(ret, Solve(x, i, y, yy, j) + Solve(i + 1, xx, y, yy, k - j));for (int i = y; i <= yy - 1; ++i) for (int j = 1; j <= k - 1; ++j) ret = gmin(ret, Solve(x, xx, y, i, j) + Solve(x, xx, i + 1, yy, k - j));return f[x][xx][y][yy][k] = ret;
}int main()
{scanf("%d%d%d", &n, &m, &t);for (int i = 1; i <= n; ++i)for (int j = i; j <= n; ++j)for (int p = 1; p <= m; ++p)for (int q = p; q <= m; ++q)for (int o = 1; o <= t; ++o) f[i][j][p][q][o] = -1;memset(Sum, 0, sizeof(Sum));for (int i = 1; i <= n; ++i) {for (int j = 1; j <= m; ++j) {scanf("%d", &Num);Sum[i][j] = Sum[i][j - 1] + Sum[i - 1][j] - Sum[i - 1][j - 1] + Num;}}Ave = (DB)Sum[n][m] / (DB)t;Solve(1, n, 1, m, t);printf("%.2lf\n", sqrt(f[1][n][1][m][t] / t));return 0;
}

  

转载于:https://www.cnblogs.com/JoeFan/p/4263820.html

[BZOJ 1048] [HAOI2007] 分割矩阵 【记忆化搜索】相关推荐

  1. bzoj 1048: [HAOI2007]分割矩阵(记忆化搜索)

    1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1133  Solved: 822 [Submit][Sta ...

  2. pku 1191 棋盘分割 DP / 记忆化搜索

    http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2]  = min(d ...

  3. NYOJ 87-棋盘分割(记忆化搜索)

    棋盘分割 时间限制:1000 ms  |  内存限制:65535 KB 难度:6 描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割 ...

  4. BZOJ 1079: [SCOI2008]着色方案 记忆化搜索

    1079: [SCOI2008]着色方案 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  5. BZOJ 2246 [SDOI2011]迷宫探险 (记忆化搜索)

    题目大意:太长了,略 bzoj luogu 并没有想到三进制状压 题解: 3进制状压陷阱的状态,0表示这种陷阱的状态未知,1已知危险,2已知不危险 然后预处理出在当前状态下,每种陷阱有害的概率,设为$ ...

  6. bzoj1048(记忆化搜索)

    1048: [HAOI2007]分割矩阵 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1218  Solved: 890 [Submit][Sta ...

  7. 【BZOJ1048】分割矩阵(记忆化搜索,动态规划)

    [BZOJ1048]分割矩阵(记忆化搜索,动态规划) 题面 BZOJ 洛谷 题解 一个很简单的\(dp\),写成记忆化搜索的形式的挺不错的. #include<iostream> #inc ...

  8. BZOJ 1589 Trick or Treat on the Farm (tarjan缩点,记忆化搜索)[Usaco 2008 Dec Gold]【BZOJ计划】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://hydro.ac/d/bzoj/p/1589 Problem 每年万圣 ...

  9. 棋盘分割(记忆化搜索)

    棋盘分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. win2003 vps IIS6中添加站点并绑定域名的配置方法
  2. java baseentity_如何在JPA的BaseEntity中实现equals()和hashcode()方法?
  3. WSDM 2021 | 基于双向推理的多跳知识库问答技术
  4. 选择省份时,自动显示对应省份的城市
  5. 【JEECG技术博文】Local storage easyui extensions
  6. java for循环求素数,求1-100的质数,用FOR循环。求救。。
  7. 快速获取Excel表格中的所有图片
  8. 操作系统 - 王道 - 第五章 I/O
  9. ds1302时钟芯片工作原理引脚电路图及功能
  10. PHP-用ThinkPHP和Bootstrap实现用户登录设计
  11. qlv转mp4出来没有画面
  12. 离散数学-图的运算与基本概念、导出子图、路与连通
  13. 内德-米德方法——《数值计算方法》
  14. 360扩展中心没有idm了_媒体中心扩展器和Xbox 360
  15. 深度学习概念——Epoch, Batch, Iteration
  16. 关于C++ delete 来释放new分配的内存
  17. [架构之路-5]:架构师 - 中国计算机技术职业资格(软考)考试是如何定义系统架构师?
  18. VBScript终极破产版石头剪刀布游戏(VBS语言实现)
  19. 悄悄送你几个黑科技资源网站 赶紧收藏起来
  20. VMware百度百科

热门文章

  1. java thread.sleep 声明_java 线程Thread.Sleep详解(转载)
  2. 中根遍历二叉查找树所得序列一定是有序序列_二叉搜索树(BST)
  3. 大文件分片上传前端框架_基于Node.js的大文件分片上传
  4. java nginx 例子_Nginx配置日志
  5. 如何获取当日日期_Power BI时间智能函数如何处理2月29日的?
  6. electron 屏幕标注_屏幕 | screen (screen) – Electron 中文开发手册
  7. suse linux下交叉编译,阐述SUSE 10.1交叉编译环境构建方法
  8. Android画布的保存,Android canvas用法介绍之save()和restore()
  9. 电赛 | 电源题软件如何准备?
  10. QuartusII下verilog设计使用OC8051和VGA两个IP核组成片上系统