题目描述

分析:

代码:

#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cctype>
using namespace std;int s[9][9],MIN;                   //MIN是一个陷阱 可以去掉 千万不能把MIN在fun函数中做全局变量来用,会GG
int sum[9][9];
int res[15][9][9][9][9];int r_sum(int x1,int y1,int x2, int y2){              //求任意矩形内所有数之和 return sum[x2][y2]+sum[x1-1][y1-1]-sum[x2][y1-1]-sum[x1-1][y2];
}int fun(int n,int x1,int y1,int x2,int y2){           //以x1,y1和x2,y2构成的 内含n个矩形 的矩形其“内部各个矩形的数字和的平方 的和”最小值 int i,l,tp,z,y,s,x,MIN=100000000;    if( res[n][x1][y1][x2][y2]!=-1 )  return res[n][x1][y1][x2][y2];if(n==1){int l1=r_sum(x1,y1,x2,y2);res[n][x1][y1][x2][y2]=l1*l1;return l1*l1;}for(i=x1;i<x2;i++){                             //纵切,留左留右哪个好?z=r_sum(x1,y1,i,y2);y=r_sum(i+1,y1,x2,y2);tp=min(y*y+fun(n-1,x1,y1,i,y2),z*z+fun(n-1,i+1,y1,x2,y2) ); if( tp<MIN ) MIN=tp;}for(l=y1;l<y2;l++){                             //横切,留上留下哪个好?s=r_sum(x1,y1,x2,l);  x=r_sum(x1,l+1,x2,y2); tp=min(s*s+fun(n-1,x1,l+1,x2,y2),x*x+fun(n-1,x1,y1,x2,l) );if( tp<MIN ) MIN=tp;                        // 四种切法哪个好?}res[n][x1][y1][x2][y2]=MIN;                     //最好的return MIN;
}int main(){
//    freopen("in.txt","r",stdin);memset(sum,0,sizeof(sum));memset(res,-1,sizeof(res));int n,i_sum;cin>>n;for(int i=1;i<=9;i++){i_sum=0;for(int j=1;j<9;j++){cin>>s[i][j];i_sum+=s[i][j];                //第i行前j个数之和 sum[i][j]+=sum[i-1][j]+i_sum;    //1,1到i,j矩形内的所有数之和
    }}
//    cout<<sum[1][1]<<' '<<sum[4][4]<<' '<<sum[8][8]<<endl;
//    cout<<fun(n,1,1,8,8)<<endl;double result=n*fun(n,1,1,8,8)-sum[8][8]*sum[8][8];printf("%.3f\n",sqrt(result/(n*n)));return 0;
}

转载于:https://www.cnblogs.com/ucandoit/p/8480392.html

DP--POJ1191 棋盘分割相关推荐

  1. POJ-1191 棋盘分割 动态规划

    详见代码: #include <cstring> #include <cstdio> #include <cstdlib> #include <cmath&g ...

  2. AcWing321.棋盘分割(区间DP)题解

    棋盘分割 题目传送门 题目描述 将一个8*8的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了(n-1)次后,连同最后剩下的矩形棋盘共有n块矩形棋盘 ...

  3. 棋盘分割(记忆化搜索)

    棋盘分割 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  4. 老BOJ 16 棋盘分割

    棋盘分割 Accept:46     Submit:186 Time Limit:1000MS     Memory Limit:65536KB Description 将一个8*8的棋盘进行如下分割 ...

  5. 递归,记忆化搜索,(棋盘分割)

    题目链接http://poj.org/problem?id=1191 Problem: 1191Memory: 568KTime: 16MSLanguage: C++Result: Accepted ...

  6. 棋盘分割(区间DP)

    将一个 8×8 的棋盘进行如下分割:将原棋盘割下一块矩形棋盘并使剩下部分也是矩形,再将剩下的部分继续如此分割,这样割了 (n−1) 次后,连同最后剩下的矩形棋盘共有 n 块矩形棋盘.(每次切割都只能沿 ...

  7. pku 1191 棋盘分割 DP / 记忆化搜索

    http://poj.org/problem?id=1191 题意:中文省略. 思路:黑说p116有讲解, 主要的状态转移方程为 横着切: dp[k][x1][y1][x2][y2]  = min(d ...

  8. POJ 1191 棋盘分割(区间DP)题解

    题意:中文题面 思路:不知道直接暴力枚举所有情况行不行... 我们可以把答案转化为 所以答案就是求xi2的最小值,那么我们可以直接用区间DP来写.设dp[x1][y1][x2][y2][k]为x1 y ...

  9. poj 1191 棋盘分割(记忆化dp+递归)

    根据这2个公式可以 得到 O^2 = sum(x1^2 + x2^2 + x3^2 +...xi^2)/n - 平均值^2 所以我们就是要使得总分的平方和尽量小-- 对于一次切割,可以横着切,可以竖着 ...

  10. NOIP 好题推荐(DP+搜索+图论)POJ ZOJ

    NOIP好题推荐(DP+搜索+图论)POJ ZOJ 1370 Gossiping (数论->模线性方程有无解的判断)+(图论->DFS)  1090 Chain ->格雷码和二进制码 ...

最新文章

  1. 第四范式冲刺IPO:4年亏13亿收入逐年翻番,研发工资人均2万
  2. Codeforces - 466C - Number of Ways - 组合数学
  3. java 打开gc日志_在运行时打开GC日志记录
  4. JS new操作符执行之后背后的操作
  5. 虚拟主机 webdav php,ubuntu 搭建 webdav 文件服务器 及客户端配置 详解
  6. vue 使用this.reload方法刷新页面配置
  7. 【snipaste下载和快捷键的修改】
  8. C# OpenXml组件
  9. android 清空剪贴板,清空剪贴板app
  10. 《那些年啊,那些事——一个程序员的奋斗史》——98
  11. 抽象类 枚举 反射 接口
  12. DTW学习(dynamic time warping)——思想、代码实现
  13. 数字孪生数字汽车风洞技术研究案例
  14. Android 微博登录
  15. 极海推出APM32A系列车规级MCU
  16. C语言教程-main函数
  17. shell脚本基础日常练习
  18. [RTL]W1C類型的Register是如何工作的
  19. 计算机突然需要管理者密码,为什么windows7旗舰版开启管理员帐号登录需要密码...
  20. SVN安全证书问题解决方案

热门文章

  1. 编程基本功:再紧急的工作到了员工手里,都不急
  2. JAVA格式化输出字串
  3. 保留正常工作的环境,等自己的搞好后再替换
  4. LINUX开机,直接进入终端,如何加载硬盘
  5. 管理员说:CSDN博客,一天访问量1000就很好了
  6. 用科学数据求真:月球的激光发射器有用吗?
  7. H264的编码负担约是解码的5-10倍
  8. 计算机桌面上的声音图标没了怎么办,电脑桌面的音量图标不见了怎么办
  9. python矩阵运算_python 矩阵运算
  10. 关于WCDMA中的扩频和调制(更新中)