1048: [HAOI2007]分割矩阵

Time Limit: 10 Sec  Memory Limit: 162 MB
Submit: 1133  Solved: 822
[Submit][Status][Discuss]

Description

  将一个a*b的数字矩阵进行如下分割:将原矩阵沿某一条直线分割成两个矩阵,再将生成的两个矩阵继续如此
分割(当然也可以只分割其中的一个),这样分割了(n-1)次后,原矩阵被分割成了n个矩阵。(每次分割都只能
沿着数字间的缝隙进行)原矩阵中每一位置上有一个分值,一个矩阵的总分为其所含各位置上分值之和。现在需要
把矩阵按上述规则分割成n个矩阵,并使各矩阵总分的均方差最小。请编程对给出的矩阵及n,求出均方差的最小值

Input

第一行为3个整数,表示a,b,n(1<a,b<=10,1<n<=10)的值。
第二行至第n+1行每行为b个小于100的非负整数,表示矩阵中相应位置上的分值。每行相邻两数之间用一个空
格分开。

Output

仅一个数,为均方差的最小值(四舍五入精确到小数点后2位)

Sample Input

5 4 4
2 3 4 6
5 7 5 1
10 4 0 5
2 0 2 3
4 1 1 1

Sample Output

0.50

最后答案是sqrt( ∑(si-ave)²/k )

其中si为第i个矩阵所有数字和,ave = 所有数之和/k

因为k当然是固定的,所以你只要算出最小的∑(si-ave)²就行了

因为ave也是固定的,所以你合并两个矩阵的(si-ave)²和当然就是直接把它们加在一起

再加上数据范围非常的小,所以可以考虑直接记忆化搜索

dp[x1][y1][x2][y2][p]表示矩阵左上角为(x1, y1),矩阵右下角为(x2, y2)被分成p块的∑(si-ave)²最小值

答案就是dp[1][1][n][m][k]!

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int sum[12][12], a[12][12], n, m, k;
double ave, dp[12][12][12][12][12];
double Sech(int b, int c, int d, int e, int f)
{int i, j;double val;if(dp[b][c][d][e][f]!=-1)return dp[b][c][d][e][f];if(f==1){val = (sum[d][e]-sum[b-1][e]-sum[d][c-1]+sum[b-1][c-1]);dp[b][c][d][e][f] = (val-ave)*(val-ave);return dp[b][c][d][e][f];}val = 2147483647;for(i=b;i<=d-1;i++){for(j=1;j<=f-1;j++)val = min(val, Sech(b, c, i, e, j)+Sech(i+1, c, d, e, f-j));}for(i=c;i<=e-1;i++){for(j=1;j<=f-1;j++)val = min(val, Sech(b, c, d, i, j)+Sech(b, i+1, d, e, f-j));}dp[b][c][d][e][f] = val;return dp[b][c][d][e][f];
}
int main(void)
{int i, j, b, c, d, e, f;scanf("%d%d%d", &n, &m, &k);for(i=1;i<=n;i++){for(j=1;j<=m;j++){scanf("%d", &a[i][j]);sum[i][j] = sum[i][j-1]+a[i][j];}for(j=1;j<=m;j++)sum[i][j] += sum[i-1][j];}ave = 1.0*sum[n][m]/k;for(b=0;b<=11;b++)for(c=0;c<=11;c++)for(d=0;d<=11;d++)for(e=0;e<=11;e++)for(f=0;f<=11;f++)dp[b][c][d][e][f] = -1;printf("%.2f\n", sqrt(Sech(1, 1, n, m, k)/k));return 0;
}

bzoj 1048: [HAOI2007]分割矩阵(记忆化搜索)相关推荐

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

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

  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. R假设检验之Shapiro检验(正太分布判断)
  2. windows常用技巧
  3. ubuntu下安装minicom
  4. es6 --- 正确获取Generator函数内部的this对象使其可以使用new
  5. redis学习-redis五大数据类型
  6. Liststring绑定到DataGridView控件
  7. Python- and or 的短路原则
  8. 进程调度算法C语言实现
  9. 计算机毕业设计题目汇总 - 简单的毕设选题
  10. Codeforces 760B Frodo and pillows
  11. LTP性能测试工具的使用详解
  12. java左移和右移_java 位运算 之 左移和右移理解
  13. 编写jQuery插件的方法
  14. html 两个input挨着,欧洲区预选赛直播 -官方网站
  15. PC端浏览器兼容测试总结
  16. 如何在Excel表中快速提取想要的数据
  17. 荣耀magic3pro和华为p50pro对比哪个好
  18. 矿泉水瓶勿重复使用易得癌病
  19. python初学者学习简单教程
  20. R语言关于心脏病相关问题的预测和分析

热门文章

  1. python常用代码大全-python基础,python基础代码大全
  2. python代码-我整理的Python代码规则
  3. python必备基础代码-Python初学者必会的3款代码编辑器
  4. 长语音识别_长文本语音识别_语音 识别 - 云+社区 - 腾讯云
  5. 语音识别如何识别中英混杂的语句?或者别的不同语言混合的语句?
  6. 约瑟夫环问题(动态链表操作)n个学生围成一圈,每m个出队,输出所有出队的序列
  7. Linux服务器的eth,linux做服务器安装两块网卡问题????
  8. 网页特效offset、client、scroll系列属性的作用
  9. 【王道计组笔记】总线(4):总线操作和定时
  10. array in java,ArrayList to Array Conversion in Java