一,题意:

中文题

二。分析:

主要利用压缩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. AtCoderAGC003D Anticube

    Description: 给定一个序列\(a\),要求选出最多的序列元素并保证两两元素的乘积不为立方数 Solution: 我们考虑哪些因子是有用的,如果一个因子的指数\(>3\),我们可以将他 ...

  2. 洛谷——P1155 双栈排序

    题目描述 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈S1和S2,Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈S1 操作b 如果栈S1 ...

  3. 洛谷 P2684 搞清洁

    P2684 搞清洁 题目描述 FJ准备分配它的N只奶牛(1 <= N <= 25,000) 做清洁工作,他把一天分成T(1 <= T <= 1,000,000)个时间段,他希望 ...

  4. QVBoxLayout移除控件之后没有消失

    想在QWidget里面动态的添加和删除控件,给QWidget设置了一个布局管理器QVBoxLayout,要删除控件可以 使用QVBoxLayout::removeWidget(QWidget *w)方 ...

  5. 迷茫了好一阵决定做WEB前端

    前两个学期事实上总是每一个学期给自己做一个计划.可是计划都付诸流水,不是自己不坚持,仅仅由于目标太不明白,总是不见成效.前一段时间最终感觉计划还得做,可是不能超过一个月,要把计划做到仔细到每一周每一天 ...

  6. Android 学习笔记进阶14之像素操作

    在我们玩的游戏中我们会经常见到一些图像的特效,比如半透明等效果.要实现这种半透明效果其实并不难,需要我们懂得图像像素的操作. 不要怕,其实在Android中Bitmap为我们提供了操作像素的基本方法. ...

  7. 55.npm install 报错 :stack Error: Can't find Python executable "python"

    转自:https://www.cnblogs.com/zengry/p/8044379.html 解决方法 : 1. 安装python , 设置环境变量 :cmd --> path='%path ...

  8. Codefroces B. New Skateboard

    B. New Skateboard time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  9. 玲珑学院 1014 Absolute Defeat

    SAMPLE INPUT 3 2 2 2 1 1 5 1 4 1 2 3 4 5 4 10 3 1 2 3 4 SAMPLE OUTPUT 1 0 15 前缀和,每个元素都判断一下. #include ...

  10. windows安装memcached

    http://www.cnblogs.com/wujuntian/p/4791220.html