在你辛苦调试一道DP题,遇到瓶颈的时候,你是否感到一股洪荒之力遏制住你的思想,使你给题库贡献了一倍的WA、RE、TLE量,却没有AC过一次?

  在这时,你应该考虑的是砸电脑再次重新考虑整个题目,再应对自己的思路考虑,是否你的思路对应这个题目有局限性?

  那在这里,就给大家提供一道基础的扩展思路完全性的题目:分蛋糕

  题目如下:

  有一块矩形大蛋糕,长和宽分别是整数w 、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且长和宽均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。请计算:最后得到的m块小蛋糕中,最大的那块蛋糕的面积下限。

假设w= 4, h= 4, m= 4,则下面的切法可使得其中最大蛋糕块的面积最小。

那么关于这道题,我的标程是在网上找的(U盘丢了→_→),虽然这道题只是一道平常的DP题,但是它让我学到了在解决DP问题的时候要考虑解决问题的完全性。

  首先看标程,在标程里,在程序里,每当我们确定要分的块数、以及当前被分的蛋糕的长、宽的时候,我们第一步是先枚举这一刀要切在哪里,先得出一个当前能求出来的最小值,先把它记录在当前数组里,然后就没了。

  怎么可能没了!!!当我们求出这一刀切在哪里的时候,才是我们这个程序最精彩的地方,想通这点,我们便可以直接get到以后DP的一个思路,我管它叫分锅(滑稽脸)。

  那么我们是怎么进行分锅的捏,很简单,当我们确定这一刀分在哪里的时候,思路会有一个局限性:已经枚举所有情况。但是我们会发现在对于当前你的刀分的地方,是严重不平衡的,一半是充满的由以前的数据得出的最优分刀情况,一半是一刀也没有切,事实上,对于DP,当前所枚举的东西是当前确定的,而关于与当前步骤无关的一切都是由前面所递推取最优所得到的部分解,所以,在我们只确定当前刀的情况下,关于当前空间的其他状况都要另作考虑(也就是考虑更小部分的最优解),所以才有了标程里的又一重循环:在确认当前步骤的情况下(分锅)寻找剩余部分可能的最优解。

  代码如下:

 #include<cstdio>
#include<iostream>
using namespace std;
#define N 25
#define INF 5005
int f[N][N][N];int w,h,m;
int main(){
w=h=m=;
for(int i=;i<=w;i++){
for(int j=;j<=h;j++){
f[i][j][]=i*j;
for(int k=;k<=m;k++){
f[i][j][k]=INF;
for(int r=;r<i;r++){
f[i][j][k]=min(f[i][j][k],max(f[r][j][k-],(i-r)*j));
for(int p=;p<k;p++)
f[i][j][k]=min(f[i][j][k],max(f[r][j][p],f[i-r][j][k-p]));
} for(int c=;c<j;c++){
f[i][j][k]=min(f[i][j][k],max(f[i][c][k-],(j-c)*i));
for(int p=;p<k;p++)
f[i][j][k]=min(f[i][j][k],max(f[i][c][p],f[i][j-c][k-p]));
}
}
}
}
while(scanf("%d%d%d",&w,&h,&m)&&(w||h||m)){
printf("%d\n",f[w][h][m]);}
return ;
}

分蛋糕

刷题向》DP》值得一做》关于对DP问题的充分考虑(normal)的更多相关文章

  1. 刷题向》关于第一篇状压DP BZOJ1087 (EASY+)

    这是本蒟蒻做的第一篇状压DP,有纪念意义. 这道题题目对状压DP十分友善,算是一道模板题. 分析题目,我们发现可以用0和1代表每一个格子的国王情况, 题目所说国王不能相邻放置,那么首先对于每一行是否合 ...

  2. 刷题总结——二叉苹果树(ssoj树形dp+记忆化搜索)

    题目: 题目背景 URAL:http://acm.timus.ru/problem.aspx?space=1&num=1018 题目描述 有一棵苹果树,如果树枝有分叉,一定是分 2 叉(就是说 ...

  3. 面试刷题32:你对tomcat做了哪些性能调优?

    背景 java程序员的开发的java应用程序,一般都会选择使用tomcat发布,但是: 如何充分的掌控tomcat,并让它发挥最优性能呢? 这也是面试的热点问题,结合多年的工作实践,我是李福春,今天总 ...

  4. 刷题总结——Cut the Sequence(POJ 3017 dp+单调队列+set)

    题目: Description Given an integer sequence { an } of length N, you are to cut the sequence into sever ...

  5. 刷题向》图论》BZOJ1179 关于tarjan和SPFA的15秒(normal)

    这道题可以考察图论的掌握程度(算半道水题) 题目如下 输入 第一行包含两个整数N.M.N表示路口的个数,M表示道路条数.接下来M行,每行两个整数,这两个整数都在1到N之间,第i+1行的两个整数表示第i ...

  6. 刷题46. Permutations

    一.题目说明 题目是46. Permutations,给一组各不相同的数,求其所有的排列组合.难度是Medium 二.我的解答 这个题目,前面遇到过类似的.回溯法(树的深度优先算法),或者根据如下求解 ...

  7. 【刷题】BZOJ 4543 [POI2014]Hotel加强版

    Description 同OJ3522 数据范围:n<=100000 Solution dp的设计见[刷题]BZOJ 3522 [Poi2014]Hotel 然后发现dp的第二维与深度有关,于是 ...

  8. ACM金牌选手整理的【LeetCode刷题顺序】

    算法和数据结构知识点图 首先,了解算法和数据结构有哪些知识点,在后面的学习中有 大局观,对学习和刷题十分有帮助. 下面是我花了一天时间花的算法和数据结构的知识结构,大家可以看看. 后面是为大家 精心挑 ...

  9. $2019$ 暑期刷题记录1:(算法竞赛DP练习)

    $ 2019 $ 暑期刷题记录: $ POJ~1952~~BUY~LOW, BUY~LOWER: $ (复杂度优化) 题目大意:统计可重序列中最长上升子序列的方案数. 题目很直接的说明了所求为 $ L ...

  10. DP刷题记录(持续更新)

    DP刷题记录 (本文例题目前大多数都选自算法竞赛进阶指南) TYVJ1071 求两个序列的最长公共上升子序列 设\(f_{i,j}\)表示a中的\(1-i\)与b中色\(1-j\)匹配时所能构成的以\ ...

随机推荐

  1. Java一般要学多久?

    其实学java一般要多久?因人而异,有些人资质好,头脑聪明几个月就能学会,有些人天生愚钝,理解能力差,不过勤能补拙,只是时间相对长点 要坚持住.不过java相对于C,C++java而言,java无疑简 ...

  2. 【vs2013】如何在VS的MFC中配置使用GDI+?

    摘自:http://www.cnblogs.com/CSGrandeur/p/3156843.html (已实验,可行) 1.配置GDI+ VS2010自带GDI+,直接使用. (1)首先要添加头文件 ...

  3. python学习之面向对象(下)

    该篇主要是针对面向对象的细讲,包括类的多重继承,方法的重写,析构函数,回收机制进行讲解 #该类主要是讲述python面象对象的一些特征,包括继承,方法的重写,多态,垃圾回收 class person( ...

  4. js错误Cannot set property 'action' of null

    Cannot set property 'action' of null [自己解决问题答案] 应该放到form里面 [网上答案]是页面无法加载完毕执行代码.可以把获取元素等一系列的操作放在 wind ...

  5. 调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type

    调试SPRING MVC(或者整合SSH)的时候遇到了org/objectweb/asm/Type 解决方法1: 原因是Spring中的cglib-nodep-2.x.x.jar与Hibernate中 ...

  6. yield 与生成器

    yield的功能类似于return,但是不同之处在于它返回的是生成器. 生成器 生成器是通过一个或多个yield表达式构成的函数,每一个生成器都是一个迭代器(但是迭代器不一定是生成器). 如果一个函数 ...

  7. remoting与socket、web service的比较及实例

    remoting基础 一种分布式处理方式,可以说是DCOM的一种升级 跨过应用程序域,与另外的应用程序域进行通信,即穿越边界 在remoting中是通过通道(channel)来实现两个应用程序域之间对 ...

  8. homebrew的安装与使用

    homebrew的安装:http://jingyan.baidu.com/article/fec7a1e5ec30341190b4e7e5.html 引用segfaultment上面的回答 没这个说法 ...

  9. php无wsdl webservice服务用法

    服务端: <?php class test { function add($a,$b) { return $a+$b; } } function getUserInfo($name) { ret ...

  10. sql server中类似oracle中decode功能的函数

    sqlserver 2008 写法 select t.PROJECTNAME, t.BUILDCONTENTSCALE, CASE t.PROJECTLEVEL ' THEN '国家重点' ' THE ...