一,题意:

中文题

二。分析:

主要利用压缩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+记忆化搜索)的更多相关文章

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

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

  2. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  3. poj - 1191 - 棋盘切割(dp)

    题意:将一个8*8的棋盘(每一个单元正方形有个分值)沿直线(竖或横)割掉一块,留下一块,对留下的这块继续这样操作,总共进行n - 1次,得到n块(1 < n < 15)矩形,每一个矩形的分 ...

  4. poj 1088 滑雪(区间dp+记忆化搜索)

    题目链接:http://poj.org/problem?id=1088 思路分析: 1>状态定义:状态dp[i][j]表示在位置map[i][j]可以滑雪的最长区域长度: 2>状态转移方程 ...

  5. POJ 1088: 滑雪(经典 DP+记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74996   Accepted: 27818 Description ...

  6. POJ 1088 DP=记忆化搜索

    话说DP=记忆化搜索这句话真不是虚的. 面对这道题目,题意很简单,但是DP的时候,方向分为四个,这个时候用递推就好难写了,你很难得到当前状态的前一个真实状态,这个时候记忆化搜索就派上用场啦! 通过对四 ...

  7. poj1664 dp记忆化搜索

    http://poj.org/problem?id=1664 Description 把M个相同的苹果放在N个相同的盘子里,同意有的盘子空着不放,问共同拥有多少种不同的分法?(用K表示)5.1.1和1 ...

  8. 【bzoj5123】[Lydsy12月赛]线段树的匹配 树形dp+记忆化搜索

    题目描述 求一棵 $[1,n]$ 的线段树的最大匹配数目与方案数. $n\le 10^{18}$ 题解 树形dp+记忆化搜索 设 $f[l][r]$ 表示根节点为 $[l,r]$ 的线段树,匹配选择根 ...

  9. 【BZOJ】1415 [Noi2005]聪聪和可可 期望DP+记忆化搜索

    [题意]给定无向图,聪聪和可可各自位于一点,可可每单位时间随机向周围走一步或停留,聪聪每单位时间追两步(先走),问追到可可的期望时间.n<=1000. [算法]期望DP+记忆化搜索 [题解]首先 ...

随机推荐

  1. Python中import和from的一些事。。。

    摘自python学习手册, 用于记录. 客户端可以执行import或from语句.如果模块还没有加载,这两个语句会去搜索.编译以及执行模块文件程序.主要差别在于,import会读取整个模块,所以必须进 ...

  2. 洛谷 P3670 [USACO17OPEN]Bovine Genomics S奶牛基因组(银)

    P3670 [USACO17OPEN]Bovine Genomics S奶牛基因组(银) 题目描述 Farmer John owns NN cows with spots and NN cows wi ...

  3. HTML5:标记文字

    文本层面的元素(简称文本元素).把这些元素加入文本其中,也就引入了结构和含义. HTML5规范明白指出:使用元素应该全然从元素的语义出发.但这类元素中有些元素的含义很明白,有些则比較含糊. 在元素的使 ...

  4. DB2物化视图(Materialized Query Tables, MQT)

    DB2的物化视图MQT是基于查询结果定义的一个表,MQT中包括的数据来自MQT定义所基于的一个或多个表, 使用MQT能够显著提高查询的操作性能. 数据库的视图和MQT都是基于一个查询来定义的.每当视图 ...

  5. Torch 的安装与基本用法

    本文安装仅限 ubuntu 系统.官方文档见:Getting started with Torch. 0. 简介 Torch 使用轻量级脚本语言 Lua 及其 C/CUDA 扩展模块实现,底层数值计算 ...

  6. java为什么要定义接口等相关解释

    1.接口的作用是实现多重继承  因为只能继承一个类(规定的) 2.一个类只能继承一个父类,但是可以实现一个或多个接口 3.abstract关键词能让你在类里创建一个或多个没有定义的方法—你给出接口,但 ...

  7. 2017国家集训队作业[agc006e]Rotate 3x3

    2017国家集训队作业[agc006e]Rotate 3x3 题意: ​ 给你一个\(3*N\)的网格,每次操作选择一个\(3*3\)的网格,旋转\(180^\circ\).问可不可以使每个位置\(( ...

  8. Python 3 下载安装和环境搭建

    Python3 下载 由于博主使用的平台是Windows10,以下方法仅限win10系统 Python 官网:https://www.python.org/ 找到跟系统相应的版本瞎子: Python ...

  9. python +uiautomator 安卓UI控件操作

    一.搭建环境 准备:win7.JDK.androidSDK(adt-bundle-windows-x86_64-20140702\sdk).Appium.安卓模拟器(真机也可以),可以到这个地址下载h ...

  10. android:giavity和layout_gravity的差别

    android:gravity: 是对该view中内容的限定.比方一个button 上面的text. 你能够设置该text 相对于view的靠左,靠右等位置. android:layout_gravi ...