POJ 1191 棋盘分割(DP)
大体思路看,黑书。。。其他就是注意搞一个in数组,这样记忆化搜索,貌似比较快。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <cmath>
using namespace std;
#define INF 0x7fffffff
int p[][],sum[][];
double dp[][][][][];
int in[][][][][];
double s[][][][];
int dfs(int x1,int y1,int x2,int y2,int k)
{
int i;
if(in[x1][y1][x2][y2][k])
return dp[x1][y1][x2][y2][k];
if(k == )
{
in[x1][y1][x2][y2][k] = ;
return dp[x1][y1][x2][y2][k] = s[x1][y1][x2][y2];
}
else
{
double minz = INF;
for(i = x1;i < x2;i ++)
{
minz = min(dfs(x1,y1,i,y2,k-)+s[i+][y1][x2][y2],minz);
minz = min(dfs(i+,y1,x2,y2,k-)+s[x1][y1][i][y2],minz);
}
for(i = y1;i < y2;i ++)
{
minz = min(dfs(x1,y1,x2,i,k-)+s[x1][i+][x2][y2],minz);
minz = min(dfs(x1,i+,x2,y2,k-)+s[x1][y1][x2][i],minz);
}
in[x1][y1][x2][y2][k] = ;
return dp[x1][y1][x2][y2][k] = minz;
}
}
int main()
{
int i,j,k,u,v,n,temp;
scanf("%d",&n);
temp = ;
for(i = ;i <= ;i ++)
{
for(j = ;j <= ;j ++)
{
scanf("%d",&p[i][j]);
temp += p[i][j];
}
}
for(i = ;i <= ;i ++)
{
for(j = ;j <= ;j ++)
{
for(k = ;k <= ;k ++)
{
for(u = ;u <= ;u ++)
{
for(v = ;v <= n;v ++)
dp[i][j][k][u][v] = INF;
}
}
}
}
for(i = ;i <= ;i ++)
{
for(j = ;j <= ;j ++)
sum[i][j] = sum[i-][j] + sum[i][j-] - sum[i-][j-] + p[i][j];
}
for(i = ;i <= ;i ++)
{
for(j = ;j <= ;j ++)
{
for(k = ;k <= ;k ++)
{
for(u = ;u <= ;u ++)
{
s[i][j][k][u] = sum[k][u]+sum[i-][j-]-sum[i-][u]-sum[k][j-];
s[i][j][k][u] *= s[i][j][k][u];
}
}
}
}
printf("%.3f\n",sqrt(dfs(,,,,n)*1.0/n-(temp*1.0/n)*(temp*1.0/n)));
return ;
}
POJ 1191 棋盘分割(DP)的更多相关文章
- poj 1191 棋盘分割(dp + 记忆化搜索)
题目:http://poj.org/problem?id=1191 黑书116页的例题 将方差公式化简之后就是 每一块和的平方 相加/n , 减去平均值的平方. 可以看出来 方差只与 每一块的和的平方 ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- poj 1191 棋盘分割 动态规划
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11457 Accepted: 4032 Description ...
- POJ 1191 棋盘分割
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11213 Accepted: 3951 Description 将一个 ...
- POJ 1191棋盘分割问题
棋盘分割问题 题目大意,将一个棋盘分割成k-1个矩形,每个矩形都对应一个权值,让所有的权值最小求分法 很像区间DP,但是也不能说就是 我们只要想好了一个怎么变成两个,剩下的就好了,但是怎么变,就是变化 ...
- (中等) POJ 1191 棋盘分割,DP。
Description 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘.(每次 ...
- POJ - 1191 棋盘分割 记忆递归 搜索dp+数学
http://poj.org/problem?id=1191 题意:中文题. 题解: 1.关于切割的模拟,用递归 有这样的递归方程(dp方程):f(n,棋盘)=f(n-1,待割的棋盘)+f(1,割下的 ...
- POJ 1191 棋盘分割(DP)
题目链接 题意 : 中文题不详述. 思路 : 黑书上116页讲的很详细.不过你需要在之前预处理一下面积,那样的话之后列式子比较方便一些. 先把均方差那个公式变形, 另X表示x的平均值,两边平方得 平均 ...
随机推荐
- Trailing Zeros
Write an algorithm which computes the number of trailing zeros in n factorial. Have you met this que ...
- Windows系统时间同步出错解决办法
有时候我们设置本地时间与Internet时间同步时,经常连接服务器time.windows.com超时,导致时间同步失败,解决办法如下: 利用快捷键"Win+R"调出运行框,输入: ...
- 【贪心】最大乘积-贪心-高精度-java
问题 G: [贪心]最大乘积 时间限制: 1 Sec 内存限制: 128 MB提交: 34 解决: 10[提交][状态][讨论版] 题目描述 一个正整数一般可以分为几个互不相同的自然数的和,如3 ...
- Eclipse调试:F5、F6、F7、F8
F5:跳入方法 F6:向下逐行调试 F7:跳出方法 F8:直接跳转到下一个断点 转载自:http://blog.sina.com.cn/s/blog_6271df6f0101d856.html
- opencv学习笔记(六)直方图比较图片相似度
opencv学习笔记(六)直方图比较图片相似度 opencv提供了API来比较图片的相似程度,使我们很简单的就能对2个图片进行比较,这就是直方图的比较,直方图英文是histogram, 原理就是就是将 ...
- Mysql DDL与DML
1,文件导入:LOAD DATA INFILE '/tmp/pet.txt' INTO TABLE pet FIELDS TERMINATED BY ',' LINES TERMINATED BY ' ...
- Oracle主键操作
http://blog.csdn.net/zhanggnol/article/details/6221895
- 查看CPU是否支持虚拟化
参考:http://www.cnblogs.com/jankie/archive/2012/07/04/2575695.html 一.Windows平台:使用cpu-Z即可查看. 二.Linux平台: ...
- poj 1330 LCA
#include<cstdio> #include<iostream> #include<algorithm> #include<cstring> #i ...
- JSP页面中的pageEncoding和contentType两种属性
关于JSP页面中的pageEncoding和contentType两种属性的区别: pageEncoding是jsp文件本身的编码 contentType的charset是指服务器发送给客户端时的内容 ...