UESTC_神秘绑架案 CDOJ 881
神秘绑架案
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
冬马被方师傅绑架了!!!
一天,春希收到了一个信封,里面有一张印有8×8棋盘的纸,一个被加了密的U盘和一个便条。便条上写着:
冬马在我手上,如果你想救出冬马,U盘里就有我详细的地址,当然前提是你能解出密码!
你可以把这个棋盘分割成n块,每一次你可以从一棋盘上割下一块矩形,并让剩下的部分也是矩形,再将剩下的部分如此分割。

原棋盘每一格有一个分值,一块矩形的总分为其所含各格分值之和。你需要按上述方法将棋盘分成n块后,求出各矩形棋盘总分的均方差。我也不介意告诉你,所有均方差中的最小值就是U盘的密码,那么请挣扎吧!
平均数公式:
均方差公式:
------方师傅留
春希非常焦急的找到了你,希望你能找出这个最小值,救出冬马。
Input
第一行一个整数n,表示分割后的块数。(1<n<15)
第二行到第九行,每行八个小于100的非负整数,表示棋盘上相应格子的分值。
Output
一个数,表示求出的最小值。(四舍五入精确到小数点后三位)
Sample input and output
| Sample Input | Sample Output |
|---|---|
3 |
1.633 |
Source
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
const int maxn = ;
int sum[maxn][maxn],n;
double f[][][],average= .;
bool arrive[][][]; inline int getr(int x)
{
return (x-)/ + ;
} inline int getc(int x)
{
return (x-) % + ;
} inline int getid(int x,int y)
{
return (x-)*+y;
} double getval(int left,int right)
{
int sumx = ;
int rst = getr(left) , red = getr(right) , cst = getc(left) , ced = getc(right);
for(int i = rst ; i <= red ; ++ i)
sumx += sum[i][ced] - sum[i][cst-];
return (double)(sumx - average)*(sumx - average);
} double dp(int left,int right,int times)
{
if (arrive[left][right][times])
return f[left][right][times];
double &ans = f[left][right][times] = 1e110;
arrive[left][right][times] = true;
int rst = getr(left) , red = getr(right) , cst = getc(left) , ced = getc(right);
int number = (red - rst + ) * (ced - cst + );
if (times > number)
return ans;
if (times == ) //无法继续切割
return ans = getval(left,right);
//竖着切
for(int i = cst + ; i <= ced ; ++ i)
{
int newleft = getid(rst,i);
int newright = getid(red,i-);
ans = min(ans,getval(left,newright)+dp(newleft,right,times-)); //拿右边继续切
ans = min(ans,getval(newleft,right)+dp(left,newright,times-)); //拿左边继续切
}
//横着切
for(int i = rst ; i < red ; ++ i)
{
for(int j = ; j <= times- ; ++ j)
{
int newleft = getid(i+,cst);
int newright = getid(i,ced);
ans = min(ans,getval(left,newright)+dp(newleft,right,times-)); //拿下面继续切
ans = min(ans,getval(newleft,right)+dp(left,newright,times-)); //拿上面继续切
}
}
return ans;
} int main(int argc,char *argv[])
{
memset(sum,,sizeof(sum));
memset(arrive,false,sizeof(arrive));
scanf("%d",&n);
for(int i = ; i <= ; ++ i)
for(int j = ; j <= ; ++ j)
{
int temp;
scanf("%d",&temp);
sum[i][j] = sum[i][j-] + temp;
average += (double)temp;
}
average /= n;
printf("%.3f\n",sqrt(dp(,,n) / n));
return ;
}
UESTC_神秘绑架案 CDOJ 881的更多相关文章
- UESTC 881 神秘绑架案 --二维DP
LRJ黑书上的例题. 化简均方差公式: 均值的平方一定,所以只需让矩形的总分的平方和最小即可. 定义:dp[k][x1][y1][x2][y2],以(x1,y1)为左上角坐标,(x2,y2)为右下角坐 ...
- UESTC_冬马党 CDOJ 882
冬马党 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Statu ...
- 2014 UESTC暑前集训动态规划专题解题报告
A.爱管闲事 http://www.cnblogs.com/whatbeg/p/3762733.html B.轻音乐同好会 C.温泉旅馆 http://www.cnblogs.com/whatbeg/ ...
- java对xml文件的读取
<?xml version="1.0" encoding="UTF-8"?> <body> <names type="1 ...
- [No000056]你无法真正占有一个人,包括你的爱人,先生或太太、小孩,以及你自己....
从一出生,我们的双手就握的紧紧的,好像深知自己会失去什么 很多人迷信多子多孙才是福,老来才有依靠,但太多新闻告诉我们,很多人老了,子孙为了分家产,反而让他生不如死,死了还无法入土为安. 现实也告诉我们 ...
- 【海岛帝国系列赛】No.2 海岛帝国:“落汤鸡”市的黑帮危机
50200210海岛帝国:“落汤鸡”市的黑帮危机 [试题描述] 近几天,犯罪分子发现“药师傅”帝国的警力约等于0.(请见YSF的海岛帝国)于是开始猖狂了起来.他们选择了依山靠水(农村?)的“落汤鸡”市 ...
- UESTC_敢说就敢做 CDOJ 631
敢说就敢做 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Sta ...
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_方老师分身 I CDOJ 914
方老师分身 I Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
随机推荐
- JS代码的window.location属性详解
转载:http://www.5icool.org/a/201105/a564.html 如果你稍微懂一些JS代码,一般都会知道 window.location.href 这个属性.并且用该属性获取页面 ...
- DB2 中日期 比较
在DB2中的Date 一共识别三种格式,最常见的是这样 '2013-12-12' 对,你没看错,DB2认为这样的字符串就是Date数据 然后我们可以利用函数这样寻找日期区间 select * from ...
- Jquery的bootstrap在线文本编辑器插件Summernote
http://www.jqcool.net/demo/201407/bootstrap-summernote/ Summernote是一个基于jquery的bootstrap超级简单WYSIWYG在线 ...
- poj 3498 March of the Penguins(最大流+拆点)
题目大意:在南极生活着一些企鹅,这些企鹅站在一些冰块上,现在要让这些企鹅都跳到同一个冰块上.但是企鹅有最大的跳跃距离,每只企鹅从冰块上跳走时会给冰块造成损害,因此企鹅跳离每个冰块都有次数限制.找出企鹅 ...
- hihoCoder 1116 计算 (线段树)
题意 : 描述 现在有一个有n个元素的数组a1, a2, ..., an. 记f(i, j) = ai * ai+1 * ... * aj. 初始时,a1 = a2 = ... = an = 0,每次 ...
- QT文件夹定位(网友提供)
#ifndef FOLDERFINDER_H #define FOLDERFINDER_H#include <QDir>class FolderFinder{public: QStr ...
- Dalvik虚拟机的启动过程分析
文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/8885792 在Android系统中,应用程序进 ...
- Tomcat 配置篇
Tomcat 配置一.Tomcat 基本介绍 1.关键目录 a) bin 该目录包含了启动.停止和启动其他的脚本,如startup.sh.shutdown.sh等; b) conf 配置文件和一些文档 ...
- Asp.net Mvc 请求是如何到达 MvcHandler的——UrlRoutingModule、MvcRouteHandler分析,并造个轮子
这个是转载自:http://www.cnblogs.com/keyindex/archive/2012/08/11/2634005.html(那个比较容易忘记,希望博主不要生气的) 前言 本文假定读者 ...
- CGRect包含交错,边缘,中心的检测
CGRectContainsPoint函数 判断给定的点是否被一个CGRect包含,可以用CGRectContainsPoint函数 BOOL contains = CGRectCont ...