POJ1191棋盘分割
题目:http://poj.org/problem?id=1191
1.分析式子!!!
发现xba是定值,σ的大小仅和∑ xi^2 有关。故dp条件是平方和最小。
2.分出一块就像割掉一条,只需枚举从四个方向割+割多宽。
(赋初值之小优美)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
using namespace std;
int n,a,sum[][],sm[],ss,d[][][][][];
bool vis[][][][][];
double xba,ans;
int summ(int x1,int y1,int x2,int y2)
{
int s=sum[x2][y2]-sum[x1-][y2]-sum[x2][y1-]+sum[x1-][y1-];
return s*s;
}
int dfs(int x1,int y1,int x2,int y2,int k)
{
if(vis[x1][y1][x2][y2][k])return d[x1][y1][x2][y2][k];
vis[x1][y1][x2][y2][k]=;
if(k==)return d[x1][y1][x2][y2][k]=summ(x1,y1,x2,y2);
for(int i=x1;i<x2;i++)
d[x1][y1][x2][y2][k]=min(d[x1][y1][x2][y2][k],
min(dfs(i+,y1,x2,y2,k-)+summ(x1,y1,i,y2),dfs(x1,y1,i,y2,k-)+summ(i+,y1,x2,y2)));
for(int i=y1;i<y2;i++)
d[x1][y1][x2][y2][k]=min(d[x1][y1][x2][y2][k],
min(dfs(x1,i+,x2,y2,k-)+summ(x1,y1,x2,i),dfs(x1,y1,x2,i,k-)+summ(x1,i+,x2,y2)));
return d[x1][y1][x2][y2][k];
}
int main()
{
scanf("%d",&n);
memset(d,,sizeof d);
for(int i=;i<=;i++)
{
ss=;
for(int j=;j<=;j++)
{
scanf("%d",&a);
sm[j]+=a;
ss+=sm[j];
sum[i][j]=ss;
}
}
dfs(,,,,n);
xba=sum[][]/(n*1.0);
ans=d[][][][][n]+xba*xba*n-*xba*sum[][];
ans=sqrt(ans/n);
printf("%.3lf",ans);
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 棋盘分割。 dp
连接:http://poj.org/problem?id=1191 思路:额,其实就是直接搞记录一下就可以了. #include <stdio.h> #include <string ...
- POJ1191 棋盘分割
Time Limit: 1000MS Memory Limit: 10000K Total Submissions: Accepted: 题目链接: http://poj.org/problem?id ...
- 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& ...
随机推荐
- Authentication failed (rejected by the remote node), please check the Erlang
官网提供的解决方案 Synchronise Erlang Cookies (when running a manually installedWindows Service) Erlang Secur ...
- ubuntu下没有Language Support
sudo apt-get installlanguage-selector-gnome
- Elasticsearch单机下多实例配置
##################### Elasticsearch Configuration Example ##################### index.cache.field.ty ...
- echatrs可视化图在隐藏后显示不出来或是宽度出现问题
最近在做一个可视化的项目,用了百度的ECharts.js作为可视化的视图框架,echarts的实例很多,基本能满足项目的需求,而且文档也相对完整.清晰,是个很不错的前端可视化框架. 我们的项目是使用b ...
- 进程通信方式-管道pipe
管道是两个进程间进行单向通信的机制.因为管道传递数据的单向性,管道又称之为半双工管道. 1.数据只能从一个进程流向另一个进程(其中一个写管道,另一个读管道):如果要进行全双工通信,需要建立两个管道. ...
- office2013安装和破解教程
office2013安装和破解教程(非常简单) 工具/原料 ·电脑 ·office2013 ·HEU_KMS_Activator_CH_v7.6a(激活软件) 方法/步骤 1.1下载Microsoft ...
- 《Python》 面向对象初识(组合)
一.面向对象(组合): 定义:给一个类的对象封装一个属性,这个属性是另一个类的对象. 意义:让类的对象与另一个类的对象产生关系,类与类之间产生关系. 人物使用武器攻击另一个人物: class Game ...
- C++ primer第4版 4.25
编写程序比较两个 string 类型的字符串,然后编写另一 个程序比较两个 C 风格字符串的值. string str1,str2; cout<<"Enter two strin ...
- android短彩信附件机制
将一些认识写下来,和大家交流一下,同时也方便自己复习. 用户可以通过附件按钮,添加附件.以添加幻灯片为例: 如果点击幻灯片,会走如下代码: ComposeMessageActivity.java pr ...
- django中的分页器组件
目录 django的组件-分页器 引入分页器 分页器demo 创建数据库模型 url控制器 views视图函数 templates模板 为什么要用分页器 导入分页器 分页器优化1 分页器优化2 有多少 ...