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-由高向低海拔 ...
随机推荐
- [证书服务器 第二篇] 基于OpenSSL 在 CentOS6 系统上 搭建自签证书服务,并应用于Web容器
第一部分:概述 .. 第二部分:环境准备 1 操作系统 CentOS 6.x 2 安装openssl yum install -y openssl 3 安装jdk 从官网下载JDK http://ww ...
- 9patch图片
9patch图片可直接缩放,放在drawable文件夹下就可以 右边和下边指定内容区域
- ZOJ - 3865 Superbot 【BFS】
题目链接 http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3865 思路 一个迷宫题 但是每次的操作数和普通的迷宫题不一样 0 ...
- PAT 天梯赛 L2-022. 重排链表 【数据结构】
题目链接 https://www.patest.cn/contests/gplt/L2-022 思路 先用结构体 把每个结点信息保存下来 然后深搜一下 遍历一下整个链表 然后就重新排一下 但是要注意一 ...
- PAT 甲级 1065. A+B and C (64bit) (20) 【大数加法】
题目链接 https://www.patest.cn/contests/pat-a-practise/1065 思路 因为 a 和 b 都是 在 long long 范围内的 但是 a + b 可能会 ...
- [Android] Gradle 安装
Gradle安装非常简单,只要从官网下载压缩包,解压,修改一下环境变量即可. 笔者写本篇随笔时,版本是1.12. Windows下安装 1 到官网(http://www.gradle.org/down ...
- ZOJ - 3430 Detect the Virus —— AC自动机、解码
题目链接:https://vjudge.net/problem/ZOJ-3430 Detect the Virus Time Limit: 2 Seconds Memory Limit: 6 ...
- Spark- Spark Yarn模式下跑yarn-client无法初始化SparkConext,Over usage of virtual memory
在spark yarn模式下跑yarn-client时出现无法初始化SparkContext错误. // :: INFO mapreduce.Job: Task Id : attempt_142829 ...
- 左侧浮动html网页模板
左侧浮动html网页模板是一款左侧导航菜单随网页滚动的html网站模板. 地址:http://www.huiyi8.com/sc/10617.html
- PHP 流程控制
流程控制 if, else, elseif $a = 5; $b = 9; if ($a > $b): echo "a is bigger than b"; elseif ( ...