poj1191(記憶化搜索)
題目鏈接:http://poj.org/problem?id=1191
題意:中文題誒~
思路:這道題有幾個關鍵點需要想通,不然會比較難做...
首先,題目給出的標準差公式並不是很好計算,需要給它變下形:
ans = sqrt(sum(xi-x)^2/n) (其中x爲平均面積,xi爲某個矩形面積...
ans^2 = sum(xi-x)^2/n
= sum(xi^2)/n - sum(2*xi*x)/n - sum(x^2)/n
=sum(xi^2)/n - 2x*sum(xi)/n - n*x^2/n
= sum(xi^2)/n - 2x*nx/n - x^2
= sum(xi^2)/n - x^2
顯然 sum(xi^2)/n >= x^2,所以只要求得 min(sum(xi^2)/n) 即求得 min(sum(xi^2)) 即可;
对于求 min(sum(xi^2)) 显然可以用dfs解决(据说还可以dp), 不过这里的 i <15,太暴力会tle,需要加个记忆优化;
注意:由一对顶点可以确定一个矩形;
题目要求只能对分割后得到的两个矩形其中一个继续分割;
可以先对矩形预处理一下,sum(x, y) = sum(x-1, y) + sum(x, y-1) + value - sum(x-1, y-1),这样再计算单个矩形面积时会方便一些;
代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <math.h>
using namespace std; const int MAXN=;
const int inf=1e9;
int a[MAXN][MAXN], n;
int dp[MAXN][MAXN][MAXN][MAXN][MAXN+]; int area(int x1, int y1, int x2, int y2){
return a[x2][y2]-a[x2][y1-]-a[x1-][y2]+a[x1-][y1-];
} int dfs(int x1, int y1, int x2, int y2, int cnt){
if(dp[x1][y1][x2][y2][cnt]!=-) return dp[x1][y1][x2][y2][cnt];
if(cnt==n){
int gg=area(x1, y1, x2, y2);
return dp[x1][y1][x2][y2][cnt]=gg*gg;
}
int m=inf;
for(int i=x1; i<x2; i++){//注意这里是从x1开始,因为可以选择不切割
int l=area(x1, y1, i, y2);
int r=area(i+, y1, x2, y2);
m=min(m, min(dfs(x1, y1, i, y2, cnt+)+r*r, dfs(i+, y1, x2, y2, cnt+)+l*l));
}
for(int i=y1; i<y2; i++){//同理,这里是从y1开始
int l=area(x1, y1, x2, i);
int r=area(x1, i+, x2, y2);
m=min(m, min(dfs(x1, y1, x2, i, cnt+)+r*r, dfs(x1, i+, x2, y2, cnt+)+l*l));
}
return dp[x1][y1][x2][y2][cnt]=m;
} int main(void){
while(cin >> n){
memset(a, , sizeof(a));
memset(dp, -, sizeof(dp));
for(int i=; i<=; i++){
for(int j=; j<=; j++){
int x;
cin >> x;
a[i][j]=a[i-][j]+a[i][j-]-a[i-][j-]+x;
}
}
double avi=a[][]*1.0/n;
double cnt=dfs(, , , , )*1.0/n;
printf("%.3lf\n", sqrt(cnt-avi*avi));
}
return ;
}
poj1191(記憶化搜索)的更多相关文章
- poj1088(記憶化搜索)
題目鏈接:http://poj.org/problem?id=1088 題意:中文題誒- 思路:dfs,不過直接dfs因該會超時,那我們給他加個記錄路徑就好了... 代碼: #include < ...
- poj1191 棋盘分割【区间DP】【记忆化搜索】
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16263 Accepted: 5812 Description ...
- Linux Kernel 記憶體管理機制之美<转>
转自--http://five.rdaili.com/sohu.com.php?u=Mq3EniVnae0axim7jkGhH0IhA9uho6CQso7R1aYomXWJ9UemfwUQYmKRc8 ...
- bzoj1079--记忆化搜索
题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...
- bzoj3208--记忆化搜索
题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...
- [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索
1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...
- 【BZOJ-3895】取石子 记忆化搜索 + 博弈
3895: 取石子 Time Limit: 1 Sec Memory Limit: 512 MBSubmit: 263 Solved: 127[Submit][Status][Discuss] D ...
- hdu3555 Bomb (记忆化搜索 数位DP)
http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others) Memory ...
- ACM/ICPC 之 简单DP-记忆化搜索与递推(POJ1088-滑雪)
递推型DP 将每个滑雪点都看作起点,从最低点开始逐个由四周递推出到达此点的最长路径的长度,由该点记下. 理论上,也可以将每一点都看作终点,由最高点开始计数,有兴趣可以试试. //经典DP-由高向低海拔 ...
随机推荐
- SAP-财务会计
[转自 http://blog.itpub.net/195776/viewspace-1023913/] 一.FI组织架构1主数据1.1总帐科目1.2帐户组.1.3统驭科目1.4 总帐未清项管理2 凭 ...
- Android Studio快速添加Gson Gsonformat
一.Android Studio快速添加Gson 具体操作: 1.File->Project Structure: 2.app->Dependencies->" ...
- mysql 创建用户与授权
权限管理 我们都知道,最高权限管理者是 root 用户 , 它拥有着最高的权限操作,包括 : select(查询) ,update(修改) , delete(删除,有事没事都不要用这个,反正也不能给这 ...
- Data Structure Binary Tree: Level order traversal in spiral form
http://www.geeksforgeeks.org/level-order-traversal-in-spiral-form/ #include <iostream> #includ ...
- 5.2 《锋利的jQuery》jQuery对表格的操作(选项卡/换肤)
表格隔行变色以及单选/复选 表格展开关闭 表格筛选 字体变大/缩小 选项卡 网页换肤 tip1: $("tr:odd")和$("tr:even")选择器索引是从 ...
- Storm worker 并行度等理解
Storm 调优是非常重要的, 仅次于写出正确的代码, 好在Storm官网上有关于worker executors tasks的介绍, http://storm.incubator.apache.or ...
- enable nested VT in VM
问题描述: 处理器支持VT-x,并且已经在BIOS中开启了VT-x.在host os上用VMware Workstation安装了一个Ubuntu虚拟机,在虚拟机中执行“cat /proc/cpuin ...
- 分享知识-快乐自己:SpringMVC 底层执行原理解析
底层实现原理图: 观看底层代码: 1):打开 web.xml 文件 2):按住 Ctrl + 鼠标左键 进入底层查看源码 3):按住 Ctrl+o 找到对应的方法doDispatch 5): ...
- Trustzone——利用硬件对数据加密,秘钥存在芯片里
我是看 https://zhuanlan.zhihu.com/p/26441212 这个文章知道trustzone自身会存储秘钥,这个秘钥可以来自用户指纹,也可以来自云端下发的key. Truztzo ...
- 乱写的一个SQL框架
闲来没事,看了mybatis的实现形式,就心血来潮的自己弄了一个仿照mybatis的框架,性能肯定不好,而且有很多问题,但是是一次有益的尝试 1.基本配置文件 <!--加载数据源--> & ...