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+记忆化搜索 [题解]首先 ...
随机推荐
- 喜马拉雅FM
import requestsimport jsonstart_url ='https://www.ximalaya.com/revision/play/album?albumId=3595841&a ...
- 【Uva 1601】The Morning after Halloween
[Link]: [Description] 给你一张平面图; 最多可能有3只鬼; 给出这几只鬼的初始位置; 然后,这几只鬼有各自的终点; 每秒钟,这几只鬼能同时移动到相邻的4个格子中的一个 任意两只鬼 ...
- Spring MVC学习总结(5)——SpringMVC项目关于安全的一些配置与实现方式
目前越来越多的应用和网站,开始注重安全性的问题,关于我们的web项目的几个安全知识点,不得不讲解一下,这里我主要讲述关于tomcat如何支持HTTPS连接访问,RSA公钥和私钥的制作.这个对于我们整个 ...
- [Javascript] Specify this using .call() or .apply()
A function's this argument is usually set implicitly, depending on how the function is called. Ordin ...
- localtime死锁——多线程下fork子进程
近期測试我们自己改进的redis,发如今做rdb时,子进程会一直hang住.gdb attach上.堆栈例如以下: (gdb) bt #0 0x0000003f6d4f805e in __lll_lo ...
- opencms9.0安装
今天安装opencms 9.0遇到了一些问题,因为是初次安装和使用,导致耽误了非常多时间.所以在此记录一下以备以后借鉴. 首先附上安装步骤链接: http://www.51testing.com/ht ...
- Python下opencv使用笔记(一)(图像简单读取、显示与储存)
写在之前 从去年開始关注python这个软件,途中间间断断看与学过一些关于python的东西.感觉python确实是一个简单优美.easy上手的脚本编程语言,众多的第三方库使得python异常的强大. ...
- TextWatcher-监听输入框内容变化
今天在做邮件登录的时候,遇到了输入框(Edittext)监听事件(TextWatcher),现在记录下. 首先看如下代码 eText.addTextChangedListener(new TextWa ...
- C#定义变量
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- es6 --- var const let
var const let 区别 今天第一次遇到const定义的变量,查阅了相关资料整理了这篇文章.主要内容是:js中三种定义变量的方式const, var, let的区别. 1. const ...