poj 1191 棋盘分割(dp + 记忆化搜索)
题目: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 + 记忆化搜索)的更多相关文章
- POJ 1191 棋盘分割(DP)
题目链接 大体思路看,黑书...其他就是注意搞一个in数组,这样记忆化搜索,貌似比较快. #include <cstdio> #include <cstring> #inclu ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- POJ 1088 DP=记忆化搜索
话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...
- poj1664 dp记忆化搜索
http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...
- 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索
题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
- [题解](树形dp/记忆化搜索)luogu_P1040_加分二叉树
树形dp/记忆化搜索 首先可以看出树形dp,因为第一个问题并不需要知道子树的样子, 然而第二个输出前序遍历,必须知道每个子树的根节点,需要在树形dp过程中记录,递归输出 那么如何求最大加分树——根据中 ...
- 状压DP+记忆化搜索 UVA 1252 Twenty Questions
题目传送门 /* 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1.答案对错集合为s2时,还要问几次才能区分出来 若 ...
随机推荐
- iOS 10 版本适配问题收集-b
随着iOS10发布的临近,大家的App都需要适配iOS10,下面是我总结的一些关于iOS10适配方面的问题,如果有错误,欢迎指出. 1.系统判断方法失效: 在你的项目中,当需要判断系统版本的话,不要使 ...
- eclipse 配置git ssh登录
实现需要安装git的插件,由于我使用的adt和eclipse for javaee版本两个,都已经安装了git插件,就不再演示了,网上都有. 这篇文章主要是介绍使用ssh进行认证的方式. 1.首先,配 ...
- tar命令,转来等用
tar 解压缩命令 tar -c: 建立压缩档案 -x:解压 -t:查看内容 -r:向压缩归档文件末尾追加文件 -u:更新原压缩包中的文件 这五个是独立的命令,压缩解压都要用到其中一个,可以和别的命令 ...
- oracle——外连接查询
一.问题描述 有时我们为了保留某个表中的数据,而该表中的数据在另外一个关联表中未必都存在对应,此时就应该试用外连接查询. 比如:两个表,产品表和子产品表 注:子产品的parent_product_id ...
- 2013 Asia Chengdu Regional Contest
hdu 4786 Fibonacci Tree http://acm.hdu.edu.cn/showproblem.php?pid=4786 copyright@ts 算法源于ts,用最小生成树可以求 ...
- C#调用大漠插件的方法和实例
大漠插件是一个很不错的东西,在按键精灵和易语言里面用得很多,可以后台找图找字,写游戏自动脚本用得特别多.前面写一个微信的自动脚本,查了一些资料,易语言不太熟悉,按键精灵功能上可能不好实现,就找了些资料 ...
- hibernate里createSQLQuery
一.addEntity()和setResultTransformer()方法 1. 使用SQLQuery 对原生SQL查询执行的控制是通过SQLQuery接口进行的,通过执行Session.creat ...
- JS常见排序算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- HDU4276 The Ghost Blows Light SPFA&&树dp
题目的介绍以及思路完全参考了下面的博客:http://blog.csdn.net/acm_cxlove/article/details/7964739 做这道题主要是为了加强自己对SPFA的代码的训练 ...
- java基础知识回顾之---java StringBuilder与StringBuffer异同点
/* * StringBuilder与StringBuffer异同点: * * 使用方法与StringBuffer完全一样 * Str ...