详见代码:

#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <iostream>
#include <algorithm>
using namespace std;int N, sum[10][10];  // sum[i][j] 表示以i,j为右下角的矩阵的和
int dp[15][10][10][10][10];
int tot[10][10][10][10]; // tot[m][n][i][j]记录了左上角为m, n右下角为i, j的总和
/*题目是要求均方差的最小值,我们选择对这个式子进行化简,设均方差为T, 均值为U T^2 = 1/N( sum(xi^2) - U^2 ) 又有 U = sum(xi)/N 可得出答案 因此只要每个部分的和值的平方最小就满足条件了,也就是每一块的和值最小dp[k][m][n][i][j] 表示左上角为[m, n] 右下角为[i, j]一共有多少种分解方式那么这个分解方案就是由将这个[m][n][i][j]划出一块了作为第k块,然后将剩下的一个矩形进行k-1次分割,所以说题目所说的那个剩下的一个矩形也是非常有用的当横着切的时候 dp[k,m,n,i,j] = min(dp[k-1, m,a,i,j]+tot[m,n,i,a-1], dp[k-1, m,n,i,a-1]+tot[m,a,i,j]); n < a <= j当竖着切的时候dp[k,m,n,i,j] = min(dp[k-1, a,n,i,j]+tot[m,n,a-1,j], dp[k-1, m,n,a-1,j]+tot[a,n,i,j]); m < a <= i
*/ void DP() {for (int k = 1; k < N; ++k) { // 枚举切割了多少次 for (int i = 1; i <= 8; ++i)for (int j = 1; j <= 8; ++j)for (int m = 1; m <= i; ++m)for (int n = 1; n <= j; ++n) { // 枚举合法的四个坐标 // 以下为横向切割int Min = 0x7fffffff, t;for (int a = n+1; a <= j; ++a) {t = min(dp[k-1][m][a][i][j]+tot[m][n][i][a-1], dp[k-1][m][n][i][a-1]+tot[m][a][i][j]); Min = min(Min, t);}// 以下为纵向切割for (int a = m+1; a <= i; ++a) {t = min(dp[k-1][a][n][i][j]+tot[m][n][a-1][j], dp[k-1][m][n][a-1][j]+tot[a][n][i][j]);Min = min(Min, t);}if (Min != 0x7fffffff)dp[k][m][n][i][j] = Min;}}
}int main() {int c;while (scanf("%d", &N) == 1) {memset(dp, 0x3f, sizeof (dp));// 没有初始化的话,可能会在动态规划过程中,将一些不可能的值当做0带入进来,比如把一个方格分割成两块 for (int i = 1; i <= 8; ++i) {for (int j = 1; j <= 8; ++j) {scanf("%d", &sum[i][j]);sum[i][j] += sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1];}}for (int i = 1; i <= 8; ++i)for (int j = 1; j <= 8; ++j)for (int m = 1; m <= i; ++m)for (int n = 1; n <= j; ++n) {tot[m][n][i][j] = sum[i][j] - sum[m-1][j] - sum[i][n-1] + sum[m-1][n-1];tot[m][n][i][j] *= tot[m][n][i][j];  // 计算出子矩形和的平方 dp[0][m][n][i][j] = tot[m][n][i][j]; // 边界条件的初始化
        }DP();printf("%.3lf\n", sqrt(double(N*dp[N-1][1][1][8][8]-tot[1][1][8][8])/(N*N)));}return 0;
}

转载于:https://www.cnblogs.com/Lyush/archive/2013/01/11/2856768.html

POJ-1191 棋盘分割 动态规划相关推荐

  1. POJ 1191 棋盘分割(区间DP)题解

    题意:中文题面 思路:不知道直接暴力枚举所有情况行不行... 我们可以把答案转化为 所以答案就是求xi2的最小值,那么我们可以直接用区间DP来写.设dp[x1][y1][x2][y2][k]为x1 y ...

  2. poj 1191 棋盘分割(记忆化dp+递归)

    根据这2个公式可以 得到 O^2 = sum(x1^2 + x2^2 + x3^2 +...xi^2)/n - 平均值^2 所以我们就是要使得总分的平方和尽量小-- 对于一次切割,可以横着切,可以竖着 ...

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

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

  4. 递归,记忆化搜索,(棋盘分割)

    题目链接http://poj.org/problem?id=1191 Problem: 1191Memory: 568KTime: 16MSLanguage: C++Result: Accepted ...

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

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

  6. 老BOJ 16 棋盘分割

    棋盘分割 Accept:46     Submit:186 Time Limit:1000MS     Memory Limit:65536KB Description 将一个8*8的棋盘进行如下分割 ...

  7. AcWing321.棋盘分割(区间DP)题解

    棋盘分割 题目传送门 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘 ...

  8. 棋盘切割 DP POJ 1191

    把方差公式先变形为 σ2 = (1/n)∑xi2-xa2 xa为平均值. 由于要求标准差最小,只需方差最小,平均值都是一样的,n也是一样的,这样原问题就变为求这n快小棋盘总分的平方和最小 考虑左上角为 ...

  9. POJ 1321 棋盘问题(回溯)

    文章目录 1. 题目 1.1 题目链接 1.2 题目大意 1.3 解题思路 2. 代码 2.1 Accepted 代码 1. 题目 1.1 题目链接 http://poj.org/problem?id ...

最新文章

  1. go 指针变量和普通变量的转化_C语言 | 指向结构体变量的指针变量
  2. 让 Python 代码更易维护的七种武器——代码风格(pylint、Flake8、Isort、Autopep8、Yapf、Black)测试覆盖率(Coverage)CI(JK)...
  3. linux操作系统上课,Linux操作系统使用的文件系统是
  4. Ruby的module(模块)
  5. spring boot发送普通文本邮件/HTML邮件/附件邮件/图片邮件完整代码
  6. 20应用统计考研复试要点(part5)--统计学
  7. Android之PhotoView使用(原创)
  8. 典型瀑布模型四个阶段_古典瀑布模型的不同阶段
  9. mysql 聚合函数 怎么用在条件里_MySql 中聚合函数增加条件表达式的方法
  10. Unity3d Shader开发(三)Pass(Fog )
  11. 基于DDS的多波形程控信号发生器
  12. 线性表的链式存储结构(C语言实现)
  13. tablet2+android,z2tablet不开机了 怎么处理,索尼Sony Xperia 安卓平板论坛
  14. Android程序设计基础 • 【目录】
  15. Java 简单的摇骰子游戏:案例
  16. 原生js中attributes属性
  17. 如何正确使用物业安全巡检系统
  18. 中国书法家协会理事、陕西武警总队原司令员王春新莅临秦储指导交流
  19. 计算机考研算什么学士学位
  20. JavaSE_day04【数组】

热门文章

  1. 金融危机下如何获得工作和跳槽机会-网络系统工程师的最终归宿(二)
  2. GDAL读取S-57海图数据中文属性值乱码问题解决
  3. ArcGIS——Window Server2016中的安装10.2问题
  4. ArcGIS制图表达Representation-规则和几何效果
  5. c#获取机器唯一识别码
  6. SNS应用开发架构建议
  7. python 括号 垃圾_Python 为什么抛弃累赘的花括号,使用缩进来划分代码块?
  8. school_vue操作记录
  9. 后台权限html,cms后台权限架构.html
  10. MySQL安装目录分类_分类 安装 下的文章