POJ 1191 棋盘分割【区间类DP】
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)
代码如下:
/** * 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】相关推荐
- POJ 1191 棋盘分割(区间DP)题解
题意:中文题面 思路:不知道直接暴力枚举所有情况行不行... 我们可以把答案转化为 所以答案就是求xi2的最小值,那么我们可以直接用区间DP来写.设dp[x1][y1][x2][y2][k]为x1 y ...
- poj 1191 棋盘分割(记忆化dp+递归)
根据这2个公式可以 得到 O^2 = sum(x1^2 + x2^2 + x3^2 +...xi^2)/n - 平均值^2 所以我们就是要使得总分的平方和尽量小-- 对于一次切割,可以横着切,可以竖着 ...
- AcWing321.棋盘分割(区间DP)题解
棋盘分割 题目传送门 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘 ...
- pku 1191 棋盘分割 DP / 记忆化搜索
http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2] = min(d ...
- 区间类动态规划(dp)
一.问题引入 给定长为n的序列a[i],每次可以将连续一段回文序列消去,消去后左右两边会接到一起, 求最少消几次能消完整个序列,n≤500.与线性模型不同,这里消去的顺序是任意的,且消完后左右会接起来 ...
- 递归,记忆化搜索,(棋盘分割)
题目链接http://poj.org/problem?id=1191 Problem: 1191Memory: 568KTime: 16MSLanguage: C++Result: Accepted ...
- 棋盘分割(记忆化搜索)
棋盘分割 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 老BOJ 16 棋盘分割
棋盘分割 Accept:46 Submit:186 Time Limit:1000MS Memory Limit:65536KB Description 将一个8*8的棋盘进行如下分割 ...
- 第22次CSP认证 第4题 校门外的树(3种方法,非常详细)(类dp+数学)
链接: 官网: http://118.190.20.162/view.page?gpid=T125 Acwing:https://www.acwing.com/problem/content/desc ...
- 数数题(计数类 DP)做题记录
数数题(计数类 DP)做题记录 CF1657E Star MST 我们称张无向完全图是美丽的当且仅当:所有和 \(1\) 相连的边的边权之和等于这张完全图的最小生成树的边权之和. 完全图点数为 \(n ...
最新文章
- 精心分享7个小巧却强大的电脑端小软件,让人大开眼界!
- python反转链表和成对反转
- HTTPS 证书配置
- OS_FLAG.C(1)
- feather 设置坐标刻度_Matlab中将坐标轴放在原点位置
- Cocos2d-x 2 0 4 小心隐藏的retain
- Sphinx+Scws 搭建千万级准实时搜索应用场景详解
- 《教孩子编程(Python语言版)》课程介绍
- 再好好聊聊 HTTP 里的 Cookie | 实用 HTTP
- ef mysql不显示所有表_mysql中显示当前数据库下的所有表,包括视图。
- python大规模获取豆瓣影评_python自动获取豆瓣电影评分和影评
- JavaEE ActionForm的高级应用
- flash player 11.2 64位 linux,Adobe Flash Player 11.2.202 Beta 1支持 64位操作系统
- php arrayaccess什么作用,PHP中的ArrayAccess用法详解
- android nexus 刷机工具包,Nexus5刷机救砖Recovery详细教程
- 考研数学公式默写记忆PDF
- 快速搭建你的api数据交易平台-图文开发教程
- 编写优质嵌入式C程序(转)
- java将string转为json_java 怎么将string转为json数据
- SecureCRT登录会话密码解密
热门文章
- xp计算机保护系统,XP系统总是弹出“Windows文件保护”窗口提示的解决方法
- 【leetcode】722. Remove Comments
- TensorFlow中tf.ConfigProto()配置Sesion运算方式
- vue-router模块划分
- MySql 把B表数据插入到A表中
- 如何养成好的Linux操作习惯
- WPF-21:WPF实现仿安卓的图案密码键盘(改进)
- [转]简单批处理内部命令简介
- 表格求和和计算机不一致6,(电子行业企业管理)计算机电子表格公式应用常见错误及处理(6页)-原创力文档...
- UGUI是如何频繁访问Image/Text等组件的raycastTarget的(读源码有感)