題目鏈接: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(記憶化搜索)的更多相关文章

  1. poj1088(記憶化搜索)

    題目鏈接:http://poj.org/problem?id=1088 題意:中文題誒- 思路:dfs,不過直接dfs因該會超時,那我們給他加個記錄路徑就好了... 代碼: #include < ...

  2. poj1191 棋盘分割【区间DP】【记忆化搜索】

    棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 16263   Accepted: 5812 Description ...

  3. Linux Kernel 記憶體管理機制之美<转>

    转自--http://five.rdaili.com/sohu.com.php?u=Mq3EniVnae0axim7jkGhH0IhA9uho6CQso7R1aYomXWJ9UemfwUQYmKRc8 ...

  4. bzoj1079--记忆化搜索

    题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...

  5. bzoj3208--记忆化搜索

    题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目.    我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...

  6. [ACM_动态规划] 数字三角形(数塔)_递推_记忆化搜索

    1.直接用递归函数计算状态转移方程,效率十分低下,可以考虑用递推方法,其实就是“正着推导,逆着计算” #include<iostream> #include<algorithm> ...

  7. 【BZOJ-3895】取石子 记忆化搜索 + 博弈

    3895: 取石子 Time Limit: 1 Sec  Memory Limit: 512 MBSubmit: 263  Solved: 127[Submit][Status][Discuss] D ...

  8. hdu3555 Bomb (记忆化搜索 数位DP)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555 Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory ...

  9. ACM/ICPC 之 简单DP-记忆化搜索与递推(POJ1088-滑雪)

    递推型DP 将每个滑雪点都看作起点,从最低点开始逐个由四周递推出到达此点的最长路径的长度,由该点记下. 理论上,也可以将每一点都看作终点,由最高点开始计数,有兴趣可以试试. //经典DP-由高向低海拔 ...

随机推荐

  1. Redis之java增删改查

    jedis是java的redis客户端实现,要使用jedis须要加入jedis的maven依赖: <dependency> <groupId>redis.clients< ...

  2. 关于jquery-weui.js中时间控件datetimepicker的使用

    今天第一次接触jquery-weui,不太了解用法,然而官方文档写的也很简略,只好打开源代码进行研究,我想要的是设置开始日期大于当前日期,然后在源码中发现有min这个默认为undefined的属性,于 ...

  3. Java 内存模型及GC原理

    一个优秀Java程序员,必须了解Java内存模型.GC工作原理,以及如何优化GC的性能.与GC进行有限的交互,有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只有全面提升内存的管理效率,才能 ...

  4. SpringCloud与Dubbo区别

    为什么放弃Dubbo 使用SpringCloud? 相同点:SpringCloud 和Dubbo可以实现RPC远程调用框架,可以实现服务治理. 不同点: SpringCloud是一套目前比较网站微服务 ...

  5. Ubuntu 17.4下如何安装VMwareTools

    解压vmware-tools-distrib 运行vmware-install.pl安装过程中间出现错误,要求选择"ifconfig"工具.由于ifconfig工具过时逐渐被各大厂 ...

  6. 在node.js中建立你的第一个HTTp服务器

    这一章节我们将从初学者的角度介绍如何建立一个简单的node.js HTTP 服务器 创建myFirstHTTPServer.js //Lets require/import the HTTP modu ...

  7. OpenCV——PS滤镜 漩涡 vertex

    // define head function #ifndef PS_ALGORITHM_H_INCLUDED #define PS_ALGORITHM_H_INCLUDED #include < ...

  8. POJ3417Network(LCA+树上查分||树剖+线段树)

    Yixght is a manager of the company called SzqNetwork(SN). Now she's very worried because she has jus ...

  9. ACM学习历程—NPU1045 2015年陕西省程序设计竞赛网络预赛(热身赛)C题 Graph Theory(递推 && 组合数学 && 大数)

    Description In graph theory, a matching or independent edge set in a graph G = (V , E) is a set of e ...

  10. hibernate学习五 Hibernate补充

    1  MiddleGenIDE可以生成映射类和映射文件. 2