Time Limit: 1000MS              Memory Limit: 10000K
Total Submissions: Accepted:

题目链接:

http://poj.org/problem?id=1191

解题思路:

关键是方程式的化简,思路清晰,整个题的难度不大。

AC代码(课程PPT)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<iomanip> using namespace std; int s[][]; //每个格子的分数
int sum[][]; //(1,1)到(i,j)的矩形的分数之和
int res[][][][][]; //fun的记录表 int calSum(int x1, int y1, int x2, int y2)//(x1,y1)到(x2,y2)的矩形的分数之和
{
return sum[x2][y2]-sum[x2][y1-]-sum[x1-][y2]+sum[x1-][y1-];
} int fun(int n, int x1, int y1, int x2, int y2)
{
int t, a, b, c, e, MIN = ;
if (res[n][x1][y1][x2][y2] != -)
return res[n][x1][y1][x2][y2];
if (n == )
{
t = calSum(x1, y1, x2, y2);
res[n][x1][y1][x2][y2] = t * t;
return t * t;
}
for (a = x1; a < x2; a++)
{
c = calSum(a + , y1, x2, y2);
e = calSum(x1, y1, a, y2);
t = min(fun(n - , x1, y1, a, y2) + c * c, fun(n - , a + , y1, x2, y2) + e * e);
if (MIN > t) MIN = t;
}
for (b = y1; b < y2; b++)
{
c = calSum(x1, b + , x2, y2);
e = calSum(x1, y1, x2, b);
t = min(fun(n - , x1, y1, x2, b) + c * c, fun(n - , x1, b + , x2, y2) + e * e);
if (MIN > t) MIN = t;
}
res[n][x1][y1][x2][y2] = MIN;
return MIN;
}
int main() {
memset(sum, , sizeof(sum));
memset(res, -, sizeof(res)); //初始化记录表
int n;
cin>>n;
for (int i=; i<; i++)
for (int j=, rowsum=; j<; j++)
{
cin>>s[i][j];
rowsum +=s[i][j];
sum[i][j] += sum[i-][j] + rowsum;
}
double result = n*fun(n,,,,)-sum[][]*sum[][];
cout<<setiosflags(ios::fixed)<<setprecision()<<sqrt(result/(n*n))<<endl;
return ;
}

POJ1191 棋盘分割的更多相关文章

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

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

  2. poj1191棋盘分割——区间DP

    题目:http://poj.org/problem?id=1191 分析题意,可知每次要沿棋盘中的一条线把一块一分为二,取其中一块继续分割: σ最小经分析可知即为每块的xi和的平方最小: 故用区间DP ...

  3. POJ1191 棋盘分割(DP)

    化简一下那个方差得到:$$\sqrt\frac{(\Sigma_{i=1}^nx_i)-n\bar x^2}{n}$$ 除了$\Sigma_{i=1}^nx_i$这部分未知,其余已知,而那部分显然越大 ...

  4. POJ1191棋盘分割

    题目:http://poj.org/problem?id=1191 1.分析式子!!! 发现xba是定值,σ的大小仅和∑ xi^2 有关.故dp条件是平方和最小. 2.分出一块就像割掉一条,只需枚举从 ...

  5. poj1191 棋盘分割。 dp

    连接:http://poj.org/problem?id=1191 思路:额,其实就是直接搞记录一下就可以了. #include <stdio.h> #include <string ...

  6. POJ 1191 棋盘分割

    棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11213 Accepted: 3951 Description 将一个 ...

  7. poj 1191 棋盘分割 动态规划

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

  8. NOI 193棋盘分割.cpp

    193:棋盘分割 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分 ...

  9. HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索

    题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析:  枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...

随机推荐

  1. Linux下串口操作

    一.Linux下访问串口 串口位置:/dev/tty** 在Linux系统中,串口设备是通过串口终端设备文件来访问的,也就是通过访问/dev/ttyS0./dev/ttyS1./dev/ttyS2./ ...

  2. tensorflow API _ 3 (tf.train.polynomial_decay)

    学习率的三种调整方式:固定的,指数的,多项式的 def _configure_learning_rate(num_samples_per_epoch, global_step): "&quo ...

  3. Linux cp/rm/mv 强制覆盖

    一.Linux下的cp/rm/mv强制覆盖 (一).反斜杠(\)临时取消别名 [root@fz ~]# \cp filename new/filename [root@fz ~]# (二).unali ...

  4. (nohup+开启fitnesse的命令+&)让fitnesse在linux可脱离终端在后台运行

    1.脱离终端后台运行fitnesse 用终端连接linux时,开启fitnesse命令后,界面是这样的. 如果此时终端关闭或是不小心按了ctrl+c,fitnesse就被关闭,页面就无法访问了 为了解 ...

  5. pgloader 学习(四)一些简单操作例子

    上边已经说明了pgloader 的基本使用(篇理论),但是对于实际操作偏少,以下是一个简单的操作 不像官方文档那样,我为了方便,直接使用docker-compose 运行,同时这个环境,会在后边大部分 ...

  6. fake_useragent 本地运行各种报错解决办法

  7. 洛谷P4047 [JSOI2010]部落划分题解

    洛谷P4047 [JSOI2010]部落划分题解 题目描述 聪聪研究发现,荒岛野人总是过着群居的生活,但是,并不是整个荒岛上的所有野人都属于同一个部落,野人们总是拉帮结派形成属于自己的部落,不同的部落 ...

  8. c++ 题解

    43题 #include <random> #include <iostream> int main() { ][] = { {,,,}, {,,,}, {,,,}}; ; n ...

  9. GDOI2018 小学生图论题 [NTT]

    并没有传送门qwq 思路 首先要知道一个结论(或者说是一个套路):一个竞赛图缩点之后必定是一条链. 那么强联通分量的个数,就是这条链的边数+1. 考虑一条边什么时候会出现:当且仅当点集可以被分成\(S ...

  10. IDEA 重新 build Project