题面

思路:分析公式,我们可以发现平均值那一项和我们怎么分的具体方案无关,影响答案的是每个矩阵的矩阵和的平方,由于数据很小,我们可以预处理出每个矩阵的和的平方,执行状态转移。

设dp[l1][r1][l2][r2][k]是矩阵l1,r1,l2,r2切割k次的最小值,我们可以枚举是横着切还是竖着切执行状态转移。

代码:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
#define INF 0x3f3f3f3f
using namespace std; int dp[10][10][10][10][16], sum[10][10][10][10];
bool v[10][10][10][10][16];
int a[10][10]; void init() {
for (int l1 = 1; l1 <= 8; l1++)
for (int r1 = 1; r1 <= 8; r1++)
for (int l2 = l1; l2 <= 8; l2++)
for (int r2 = r1; r2 <= 8; r2++) {
int ans = 0;
for (int i = l1; i <= l2; i++)
for (int j = r1; j <= r2; j++) {
ans += a[i][j];
}
sum[l1][r1][l2][r2] = ans * ans;
}
} int solve(int l1, int r1, int l2, int r2, int k) {
if (v[l1][r1][l2][r2][k]) return dp[l1][r1][l2][r2][k];
if (k == 1) {
return dp[l1][r1][l2][r2][k] = sum[l1][r1][l2][r2];
}
int ans = INF;
for (int i = l1; i < l2; i++) {
ans = min(ans, min(solve(l1, r1, i, r2, k - 1) + sum[i + 1][r1][l2][r2], solve(i + 1, r1, l2, r2, k - 1) + sum[l1][r1][i][r2]));
}
for (int i = r1; i < r2; i++) {
ans = min(ans, min(solve(l1, r1, l2, i, k - 1) + sum[l1][i + 1][l2][r2], solve(l1, i + 1, l2, r2, k - 1) + sum[l1][r1][l2][i]));
}
v[l1][r1][l2][r2][k] = 1;
return dp[l1][r1][l2][r2][k] = ans;
}
int main() {
int n, tot = 0;
scanf("%d", &n);
for (int i = 1; i <= 8; i ++) {
for (int j = 1; j <= 8 ; j++) {
scanf("%d", &a[i][j]);
tot += a[i][j];
}
}
init();
solve(1, 1, 8, 8, n);
double ans = sqrt(dp[1][1][8][8][n] * 1.0 / n - (tot * 1.0 / n) * (tot * 1.0 / n));
printf("%.3f\n", ans);
}

  

POJ 1191 棋盘分割 (区间DP,记忆化搜索)的更多相关文章

  1. HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索

    题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析:  枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...

  2. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  3. poj 1088 滑雪(区间dp+记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...

  4. (区间dp + 记忆化搜索)Treats for the Cows (POJ 3186)

    http://poj.org/problem?id=3186   Description FJ has purchased N (1 <= N <= 2000) yummy treats ...

  5. UVA 10003 Cutting Sticks 区间DP+记忆化搜索

    UVA 10003 Cutting Sticks+区间DP 纵有疾风起 题目大意 有一个长为L的木棍,木棍中间有n个切点.每次切割的费用为当前木棍的长度.求切割木棍的最小费用 输入输出 第一行是木棍的 ...

  6. uva 10891 区间dp+记忆化搜索

    https://vjudge.net/problem/UVA-10891 给定一个序列x,A和B依次取数,规则是每次只能从头或者尾部取走若干个数,A和B采取的策略使得自己取出的数尽量和最大,A是先手, ...

  7. (中等) POJ 1191 棋盘分割,DP。

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

  8. POJ 1191 棋盘分割(DP)

    题目链接 题意 : 中文题不详述. 思路 : 黑书上116页讲的很详细.不过你需要在之前预处理一下面积,那样的话之后列式子比较方便一些. 先把均方差那个公式变形, 另X表示x的平均值,两边平方得 平均 ...

  9. loj 1031(区间dp+记忆化搜索)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1031 思路:dp[i][j]表示从区间i-j中能取得的最大值,然后就是枚举分割点了. ...

  10. BZOJ1055[HAOI2008]玩具取名 【区间dp + 记忆化搜索】

    题目 某人有一套玩具,并想法给玩具命名.首先他选择WING四个字母中的任意一个字母作为玩具的基本名字.然后 他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够 ...

随机推荐

  1. 解决:Eclipse安装Pydev插件报错: An error occurred while collecting items to be installed session context was:(profile=...

    今天在Elipse上安装Pydev插件时报错: An error occurred while collecting items to be installed session context was ...

  2. linux 缺少libxxx.a 静态链接库

    首先去官方网站下载gdb的源码包,我下载的7.4.1版本的源码包,解压开来,进入到源码包的根目录下.对于一个源码包,拿到手里首先要阅读的就是README,然后看一下INSTALL文件,这个文件里编译源 ...

  3. python lambda 用途

    可以让一个带参数函数,传递并以无参调用 def test(a): print a a=test # #a() a=897987 fun=lambda : test(a) fun()

  4. LeetCode 333. Largest BST Subtree

    原题链接在这里:https://leetcode.com/problems/largest-bst-subtree/ 题目: Given a binary tree, find the largest ...

  5. [转]Angular移除不必要的$watch之性能优化

    双向绑定是Angular的核心概念之一,它给我们带来了思维方式的转变:不再是DOM驱动,而是以Model为核心,在View中写上声明式标签.然后,Angular就会在后台默默的同步View的变化到Mo ...

  6. [转]angular之$apply()方法

    这几天,根据buddy指定的任务,要分享一点angular JS的东西.对于一个在前端属于纯新手的我来说,Javascript都还是一知半解,要想直接上手angular JS,遇到的阻力还真是不少.不 ...

  7. 在系统学习javaEE开发的颠覆者Springboot时遇到的localhost无法访问的问题

    就是新建了一个Springboot项目,但是无法正常访问. 关闭防火墙试了,mvn方式启动试了,换端口试了.然后用Tomcat的start.bat测试发现localhost是可以访问的. 上网找到各种 ...

  8. debian7.2+nginx+mysql

    1.安装mysql sudo aptitude install mysql-server netstat -atln 查看3306端口 数据库目录: /var/lib/mysql/ 配置文件/usr/ ...

  9. Azure VMSS ---- PowerShell创建自定义镜像的VMSS集群

    前面一篇文章介绍了如何用PowerShell创建标准镜像的VMSS集群.http://www.cnblogs.com/hengwei/p/7391178.html 本文将介绍,如何用PowerShel ...

  10. 在Mac系统下如何恢复SourceTree全局忽略的文件

    在家目录“~”下编辑 “.gitignore_global ” 文件即可:vim  .gitignore_global