poj 1191 棋盘切割 (压缩dp+记忆化搜索)
一,题意:
中文题
二。分析:
主要利用压缩dp与记忆化搜索思想
三,代码:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
using namespace std;
const int Big=20000000;
int Mat[10][10];
int N;
int sum[10][10];
int dp[20][10][10][10][10];
void unit()
{//求和用sum[i][j]表示ij到左上角的和
int total;
for(int i=1; i<=8; i++)
for(int j=1; j<=8; j++)
{
total=Mat[i][j];
int x_1,y_1;
x_1=i-1;
y_1=j-1;
if(x_1>0)
total+=sum[x_1][j];
if(y_1>0)
total+=sum[i][y_1];
if(x_1>0&&y_1>0)
total-=sum[x_1][y_1];
sum[i][j]=total;
}
} int account(int x_1,int y_1,int x_2,int y_2)
{//求(x_1,y_1)到(x_2。y_2)区间和
int total=sum[x_2][y_2];
int x_3,y_3;
x_3=x_1-1;
y_3=y_1-1;
if(x_3>0)
total-=sum[x_3][y_2];
if(y_3>0)
total-=sum[x_2][y_3];
if(x_3>0&&y_3>0)
total+=sum[x_3][y_3];
return total*total;
} int solve(int k,int x_1,int y_1,int x_2,int y_2)
{//记忆化dp
if(dp[k][x_1][y_1][x_2][y_2]!=-1)
return dp[k][x_1][y_1][x_2][y_2];
if(k==1)
return dp[k][x_1][y_1][x_2][y_2]=account(x_1,y_1,x_2,y_2);
if(k>1)
{
int Min=Big;
for(int i=y_1;i<y_2;i++)
{//横向分割
int first=account(x_1,y_1,x_2,i);
int second=account(x_1,i+1,x_2,y_2);
first+=solve(k-1,x_1,i+1,x_2,y_2);
second+=solve(k-1,x_1,y_1,x_2,i);
if(first>second)
first=second;
if(Min>first)
Min=first;
}
for(int j=x_1;j<x_2;j++)
{//纵向分割
int first=account(x_1,y_1,j,y_2);
int second=account(j+1,y_1,x_2,y_2);
first+=solve(k-1,j+1,y_1,x_2,y_2);
second+=solve(k-1,x_1,y_1,j,y_2);
if(first>second)
first=second;
if(Min>first)
Min=first;
}
return dp[k][x_1][y_1][x_2][y_2]=Min;
}
return dp[k][x_1][y_1][x_2][y_2]=Big;
} int main()
{
while(scanf("%d",&N)!=EOF)
{
double total=0.0;
for(int i=1; i<=8; i++)
for(int j=1; j<=8; j++)
{
scanf("%d",&Mat[i][j]);
total+=Mat[i][j];
}
unit();
memset(dp,-1,sizeof(dp));
total=(total/N)*(total/N);
double key=solve(N,1,1,8,8);
key=key/N;
key=sqrt(key-total);
printf("%0.3f\n",key);
}
return 0;
}
poj 1191 棋盘切割 (压缩dp+记忆化搜索)的更多相关文章
- HDU 2517 / POJ 1191 棋盘分割 区间DP / 记忆化搜索
题目链接: 黑书 P116 HDU 2157 棋盘分割 POJ 1191 棋盘分割 分析: 枚举所有可能的切割方法. 但如果用递归的方法要加上记忆搜索, 不能会超时... 代码: #include& ...
- POJ 1191 棋盘分割 【DFS记忆化搜索经典】
题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS Memory Limit: 10000K Total Submission ...
- poj - 1191 - 棋盘切割(dp)
题意:将一个8*8的棋盘(每一个单元正方形有个分值)沿直线(竖或横)割掉一块,留下一块,对留下的这块继续这样操作,总共进行n - 1次,得到n块(1 < n < 15)矩形,每一个矩形的分 ...
- poj 1088 滑雪(区间dp+记忆化搜索)
题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...
- POJ 1088: 滑雪(经典 DP+记忆化搜索)
滑雪 Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 74996 Accepted: 27818 Description ...
- POJ 1088 DP=记忆化搜索
话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...
- poj1664 dp记忆化搜索
http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...
- 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索
题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...
- 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索
[题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...
随机推荐
- [Python] Create a Log for your Python application
Print statements will get you a long way in monitoring the behavior of your application, but logging ...
- 【Linux探索之旅】第四部分第三课:文件传输,潇洒同步
内容简单介绍 .第四部分第三课:文件传输.潇洒同步 2.第四部分第四课:分析网络.隔离防火 文件传输.潇洒同步 这一课的内容相对简单,所以我们慢慢享用. 经过上一课的学习.我们已经知道怎样远程连接到其 ...
- awk依照多个分隔符进行切割
我们知道awk能够进行类似于cut之类的操作.如一个文件data例如以下 zhc-123|zhang hongchangfirst-99|zhang hongchang-100|zhang 假设我们 ...
- Cocos2d-x怎样控制动作速度
基本动作和组合动作实现了针对精灵的各种运动和动画效果的改变.但这种改变速度匀速的.线性的.通过ActionEase及其的派生类和Speed 类我们能够使精灵以非匀速或非线性速度运动,这样看起了效果更加 ...
- 3.cocos代码入口
模拟代码进入过程: main.cpp #include <iostream> #include "AppDelegate.h" #include "CCApp ...
- AIX 适配器
1. 查看所有适配卡 lsdev -CHc adapter 2. 物理网卡适配卡 查看到物理网卡的个数与类型 lsdev -Cc adapter|grep ent 查看物理网卡具体插槽位( ...
- 谈一谈Nginx的强大
什么是Nginx? Nginx是一款高性能,开源的,支持高并发而轻量级的Web服务器,同时也是具有反向代理服务器及电子邮件(IMAP/POP3)的代理服务器. 基于REST架构风格,并且以统一资源描述 ...
- iframe自适应高度解决方法 .
<div id="leftBar"> <iframe name="tag" src="_iframe.html" styl ...
- 【hdu 3987】Harry Potter and the Forbidden Forest
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=3987 [Description] 给出一张有n个点的图,有的边又向,有的边无向,现在要你破坏一些路 ...
- Effective C++ 条款43
学习处理模板化基类里的名称 本节作者编写的意图在我看来能够总结成一句话,就是"怎样定义并使用关于模板类的派生过程,怎样处理派生过程出现的编译不通过问题". 以下我们看一段说明性的代 ...