POJ1191 棋盘分割
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 棋盘分割的更多相关文章
- poj1191 棋盘分割【区间DP】【记忆化搜索】
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 16263 Accepted: 5812 Description ...
- poj1191棋盘分割——区间DP
题目:http://poj.org/problem?id=1191 分析题意,可知每次要沿棋盘中的一条线把一块一分为二,取其中一块继续分割: σ最小经分析可知即为每块的xi和的平方最小: 故用区间DP ...
- POJ1191 棋盘分割(DP)
化简一下那个方差得到:$$\sqrt\frac{(\Sigma_{i=1}^nx_i)-n\bar x^2}{n}$$ 除了$\Sigma_{i=1}^nx_i$这部分未知,其余已知,而那部分显然越大 ...
- POJ1191棋盘分割
题目:http://poj.org/problem?id=1191 1.分析式子!!! 发现xba是定值,σ的大小仅和∑ xi^2 有关.故dp条件是平方和最小. 2.分出一块就像割掉一条,只需枚举从 ...
- poj1191 棋盘分割。 dp
连接:http://poj.org/problem?id=1191 思路:额,其实就是直接搞记录一下就可以了. #include <stdio.h> #include <string ...
- POJ 1191 棋盘分割
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11213 Accepted: 3951 Description 将一个 ...
- poj 1191 棋盘分割 动态规划
棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 11457 Accepted: 4032 Description ...
- NOI 193棋盘分割.cpp
193:棋盘分割 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分 ...
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
随机推荐
- HTML——MP4视频不能播放
前言 HTML5中提供了video标签,但是为什么有的MP4视频可以播放,有的不能播放呢? 简介 当然是因为编码的问题咯~ 视频格式 标签属性 DOM参考 HTML 5 视频/音频参考手册 使用 &l ...
- js去除数组中重复的数字
var arr = [2,1,4,3,2,4,2,3,4,2,6,5,5] var obj = {}; var arrNew = []; for(var i=arr.length-1;i>=0; ...
- 转发: JS中的call()和apply()方法和区别 --小白变色记
一.方法定义: apply:调用一个对象的一个方法,用另一个对象替换当前对象.例如:B.apply(A, arguments);即A对象应用B对象的方法. call:调用一个对象的一个方法,用另一个对 ...
- (4)ardunio 矩阵求解官方库改造,添加逆的求解
多此一举,原来官方库给了求逆的函数,在源码里 除此之外,还有转置矩阵,只不过样例没显示出来. //Matrix Inversion Routine // * This function inverts ...
- python 字符串方法整理
Python字符串方法 1.大小写转换 1.1 lower.upper lower():小写 upper():大写 1.2 title.capitalize S.title():字符串中所有单词首字母 ...
- CLR 调试概述
利用公共语言运行时 (CLR) 调试 API,工具供应商可以编写调试器来调试运行于 CLR 环境中的应用程序. 要调试的代码可为 CLR 支持的任何代码种类.CLR 调试 API 主要是使用非托管代码 ...
- PHP.INI生成环境配置文件
extension_dir = /home/php/lib/php/extensions/no-debug-zts- zend_extension = opcache.so extension = p ...
- Tkinter 之爬虫框架项目实战
一.效果图 二.源码 ''' 测试内容页爬取''' def test_content_url(self): try: url = self.test_url_var.get().strip() ite ...
- 为什么Map桶中个数超过8才转为红黑树
这是笔者一个好友面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什么当链表长度为8的时候才做转换动作.笔者第一反应 ...
- mvn pom文件引用顺序关系
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...