http://poj.org/problem?id=1191

1>根据公式化简:

其中后者是一个已知数。求均方差的最小值就是求出个个棋盘内各数值的平方和最小值。

2>棋盘分割分四种情况:

竖切(左不动),竖切(右不动),横切(上不动),横切(下不动);

3>状态转移方程:

f(i, x1, y1, x2, y2)表示以(x1, y1),(x2, y2)为四边形对角线的棋盘切割成i块的各块值总平方的最小值;

D(x1, y1, x2, y2)表示棋盘的总分

_____________

| f(i-1, x1, a+1, x2, y2)+D(x1, y1, x2, a)   [横切(上不动)]

| f(i-1, x1,y1, x2, a)+D(x1, a+1, x2, y2)   [横切(下不动)]

f(i, x1, y1, x2, y2)=min| f(i-1,b+1, y1, x2, y2)+D(x1, y1, b1, y2)  [竖切(左不动)]

| f(i-1, x1, y1, b, y2)+D(b+1, y1, x2, y2)   [竖切(右不动)]

______________

4>其中的a, b是进行枚举的值。先预处理D(x1, y1, x2, y2)

代码如下:

View Code

/**
*  POJ 1191 棋盘分割
*/
#include<stdio.h>
#include<string.h>
#include<math.h>
int a[9][9], F[15][9][9][9][9];
int minx(int a1, int a2, int a3)
{int minnum=99999999;if(a1<minnum) minnum=a1;if(a2<minnum) minnum=a2;if(a3<minnum) minnum=a3;return minnum;
}
int get(int x1,int y1,int x2,int y2)          //用来计算分割出来块的总分
{return a[x2][y2]-a[x2][y1-1]-a[x1-1][y2]+a[x1-1][y1-1];
}
int main()
{int n, i, j, x1, y1, x2, y2, aa, b;while(scanf("%d", &n)!=EOF){memset(F, 0, sizeof(F));memset(a, 0, sizeof(a));for(i=1; i<=8; i++)for(j=1; j<=8; j++){scanf("%d",&a[i][j]);a[i][j]=a[i][j]+a[i-1][j]+a[i][j-1]-a[i-1][j-1];}for(i=1; i<=n; i++)for(x1=1; x1<=8; x1++)for(y1=1; y1<=8; y1++)for(x2=1; x2<=8; x2++)for(y2=1; y2<=8; y2++){if(i==1||x1==x2||y1==y2){F[i][x1][y1][x2][y2]=get(x1, y1, x2, y2)*get(x1, y1, x2, y2);continue;}int t1=99999999;for(aa=y1; aa<y2; aa++)t1=minx(t1, F[i-1][x1][aa+1][x2][y2]+get(x1, y1, x2, aa)*get(x1, y1, x2, aa),F[i-1][x1][y1][x2][aa]+get(x1, aa+1, x2, y2)*get(x1, aa+1, x2, y2));for(b=x1; b<x2; b++)t1=minx(t1, F[i-1][b+1][y1][x2][y2]+get(x1, y1, b, y2)*get(x1, y1, b, y2),F[i-1][x1][y1][b][y2]+get(b+1, y1, x2, y2)*get(b+1, y1, x2, y2));F[i][x1][y1][x2][y2]=t1;}double tt=F[n][1][1][8][8]*1.0/n-pow(a[8][8]*1.0/n, 2.0);printf("%.3lf\n", sqrt(tt));}return 0;
}

转载于:https://www.cnblogs.com/Hilda/archive/2013/03/02/2939688.html

POJ 1191 棋盘分割【区间类DP】相关推荐

  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. AcWing321.棋盘分割(区间DP)题解

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

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

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

  5. 区间类动态规划(dp)

    一.问题引入 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起, 求最少消几次能消完整个序列,n≤500.与线性模型不同,这里消去的顺序是任意的,且消完后左右会接起来 ...

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

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

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

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

  8. 老BOJ 16 棋盘分割

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

  9. 第22次CSP认证 第4题 校门外的树(3种方法,非常详细)(类dp+数学)

    链接: 官网: http://118.190.20.162/view.page?gpid=T125 Acwing:https://www.acwing.com/problem/content/desc ...

  10. 数数题(计数类 DP)做题记录

    数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...

最新文章

  1. 精心分享7个小巧却强大的电脑端小软件,让人大开眼界!
  2. python反转链表和成对反转
  3. HTTPS 证书配置
  4. OS_FLAG.C(1)
  5. feather 设置坐标刻度_Matlab中将坐标轴放在原点位置
  6. Cocos2d-x 2 0 4 小心隐藏的retain
  7. Sphinx+Scws 搭建千万级准实时搜索应用场景详解
  8. 《教孩子编程(Python语言版)》课程介绍
  9. 再好好聊聊 HTTP 里的 Cookie | 实用 HTTP
  10. ef mysql不显示所有表_mysql中显示当前数据库下的所有表,包括视图。
  11. python大规模获取豆瓣影评_python自动获取豆瓣电影评分和影评
  12. JavaEE ActionForm的高级应用
  13. flash player 11.2 64位 linux,Adobe Flash Player 11.2.202 Beta 1支持 64位操作系统
  14. php arrayaccess什么作用,PHP中的ArrayAccess用法详解
  15. android nexus 刷机工具包,Nexus5刷机救砖Recovery详细教程
  16. 考研数学公式默写记忆PDF
  17. 快速搭建你的api数据交易平台-图文开发教程
  18. 编写优质嵌入式C程序(转)
  19. java将string转为json_java 怎么将string转为json数据
  20. SecureCRT登录会话密码解密

热门文章

  1. xp计算机保护系统,XP系统总是弹出“Windows文件保护”窗口提示的解决方法
  2. 【leetcode】722. Remove Comments
  3. TensorFlow中tf.ConfigProto()配置Sesion运算方式
  4. vue-router模块划分
  5. MySql 把B表数据插入到A表中
  6. 如何养成好的Linux操作习惯
  7. WPF-21:WPF实现仿安卓的图案密码键盘(改进)
  8. [转]简单批处理内部命令简介
  9. 表格求和和计算机不一致6,(电子行业企业管理)计算机电子表格公式应用常见错误及处理(6页)-原创力文档...
  10. UGUI是如何频繁访问Image/Text等组件的raycastTarget的(读源码有感)