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

黑书116页的例题

将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方。

可以看出来 方差只与 每一块的和的平方有关,所以就是求每个矩形的总分的平方和 尽量小。。。。

 #include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <algorithm>
using namespace std;
const int INF = <<;
int sum[][], d[][][][][];//sum存储从【1,1】到【i, j】的和
int _min(int a, int b)
{
return a>b?b:a;
}
int getsum(int x1, int y1, int x2, int y2) //计算从【x1,y1】到【x2, y2】的和。
{
return sum[x2][y2]-sum[x1-][y2]-sum[x2][y1-]+sum[x1-][y1-];
}
int slove(int k, int x1, int y1, int x2, int y2)
{
int s1, s2, Min, temp1, temp2;
int i;
if(d[k][x1][y1][x2][y2]!=-) //不等于1表示已经求过了,不需要再求了
return d[k][x1][y1][x2][y2];
if(k == ) //表示已经切了n块了,不需要再切了
{
s1 = getsum(x1, y1, x2, y2);
return (d[k][x1][y1][x2][y2] = s1*s1);
}
Min = INF;
for(i = x1; i < x2; i++) //横向切
{
s1 = getsum(x1, y1, i, y2);
s2 = getsum(i+, y1, x2, y2);
temp1 = _min(slove(k-, i+, y1, x2, y2)+s1*s1, slove(k-, x1, y1, i, y2)+s2*s2);
if(temp1 < Min)
Min = temp1;
}
for(i = y1; i < y2; i++) //纵向切
{
s1 = getsum(x1, y1, x2, i);
s2 = getsum(x1, i+, x2, y2);
temp2 = _min(slove(k-, x1, i+, x2, y2)+s1*s1, slove(k-, x1, y1, x2, i)+s2*s2);
if(temp2 < Min)
Min = temp2;
}
return (d[k][x1][y1][x2][y2] = Min);
}
int main()
{
int n, i, j, val, x;
double aver, var;
while(~scanf("%d", &n))
{
memset(d, -, sizeof(d));
memset(sum, , sizeof(sum));
for(i = ; i <= ; i++)
for(j = , x = ; j <= ; j++)
{
scanf("%d", &val);
x += val;
sum[i][j] = sum[i-][j] + x;
}
aver = sum[][]*1.0/n; //所有块的平方和
int sum_t = slove(n, , , , );
var = sqrt(sum_t*1.0/n-aver*aver); printf("%.3lf\n", var);
}
return ;
}

poj 1191 棋盘分割(dp + 记忆化搜索)的更多相关文章

  1. POJ 1191 棋盘分割(DP)

    题目链接 大体思路看,黑书...其他就是注意搞一个in数组,这样记忆化搜索,貌似比较快. #include <cstdio> #include <cstring> #inclu ...

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

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

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

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

  4. POJ 1088 DP=记忆化搜索

    话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...

  5. poj1664 dp记忆化搜索

    http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...

  6. 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索

    题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...

  7. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

  8. [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树

    树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...

  9. 状压DP+记忆化搜索 UVA 1252 Twenty Questions

    题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...

随机推荐

  1. Extjs4 使用store的post方法

    Extjs4 使用store的post方法 引用官网的一句话 Now when we call store.load(), the AjaxProxy springs into action, mak ...

  2. mysql innodb 引擎

    innodb 引擎 一.概述 InnoDB 是一个用的比较广泛的存储引擎,因为它支持事物和外键,还有不错的效率;我们先看看官方教程怎么说; 我们先读一下, 对于上面的文档, 对一个InnoDB的表首先 ...

  3. php 安全处理方案

    Safe::mysqlSafe(); sql注入,升级5.3.6以上版本php 方案一:将所有请求中所有数据(get/post/cookie)实现mysql_escape_string进行安全处理. ...

  4. 被遗忘的Android mipmaps简介

    被遗忘的 Android mipmaps 简介 [导读]已经发布的 Android Studio1.1 版本是一个 bug 修复版本.在这个版本中,当你创建工程时一项改变将会吸引你的眼球.工程创建登陆 ...

  5. Tutorial: Model

    What is a model? Across the internet the definition of MVC is so diluted that it's hard to tell what ...

  6. HDU 2136 Largest prime factor(查找素数,筛选法)

    题目梗概:求1000000以内任意数的最大质因数是第几个素数,其中 定义 1为第0个,2为第1个,以此类推. #include<string.h> #include<stdio.h& ...

  7. Oracle的学习一:安装与卸载、sql *plus常用命令、Oracle用户管理

    1.为什么学习oracle? 性能优越: 小型数据库 中型数据库 大型数据库 acess.foxbase mysql.sql server.informix sybase.oracle.db2 复杂量 ...

  8. 6.5 THUSC 考试题解

    QAQ 由于并没有数据,而且没有A掉的是提交答案题目,所以并没有修改 QAQ 只能放题解了,代码还没有拿到,不过在清华听了一波习题讲评的安利 第一题 成绩单 先说暴力分 对于单调序列来说最优决策一定是 ...

  9. lintcode :Integer to Roman 整数转罗马数字

    题目 整数转罗马数字 给定一个整数,将其转换成罗马数字. 返回的结果要求在1-3999的范围内. 样例 4 -> IV 12 -> XII 21 -> XXI 99 -> XC ...

  10. lintcode :Count 1 in Binary 二进制中有多少个1

    题目: 二进制中有多少个1 49% 通过 计算在一个 32 位的整数的二进制表式中有多少个 1. 样例 给定 32 (100000),返回 1 给定 5 (101),返回 2 给定 1023 (111 ...