分蛋糕问题

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

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

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

输入
共有多行,每行表示一个测试案例。每行是三个用空格分开的整数w, h, m ,其中1 ≤ w, h, m ≤ 20 , m ≤ wh. 当 w = h = m = 0 时不需要处理,表示输入结束。
输出
每个测试案例的结果占一行,输出一个整数,表示最大蛋糕块的面积下限。
样例输入

4 4 4
4 4 3
0 0 0

样例输出

4
6

题目以及在线测试代码: 平台

思路

设 way(w,h,m) 蛋糕的宽、高, 以及需要的刀数,其中刀数 等于需要分成的小蛋糕数-1。
根据题目要求,求出ways(W,H,M-1);

首先,先不考虑递推的问题,而且要想出递归的思路。因为递归的思路更为符合人的思考,在得出递归思路后再将其转为递推就好。
递归思路:
假设当切需要切一刀,求出竖着切与横着切那个比较小
既:
w,h,m = min(SV,SH)//通过现在的最小得到蛋糕 宽和高
return ways(w,h,m-1) ; //通过递归调用求出再切一刀后的最小下限

然后是边界条件:
if(wh < m+1)//边界 蛋糕最小是11的矩阵,wh蛋糕最多可以用 wh-1 刀来切
return INFI;//无穷大
if(m==0)
return wh; // wh

递推思路:
边界条件:
递推的边界条件与递归的边界条件相同
递推公式: SV为第一刀竖着切时能得到的最好结果,SH为第一刀横着切时能得到的最好结
果,则ways(w,h,m) = min(SV,SH)
SV = min{ Si, i = 1 … w-1 },其中: Si = 为第一刀左边宽为i的情况下的最好结果
递推式:
SV为第一刀竖着切时能得到的最好结果,SH为第一刀横着切时能得到的最好结
果,则ways(w,h,m) = min(SV,SH)
SV = min{ Si, i = 1 … w-1 },
其中: Si = 为第一刀左边宽为i的情况下的最好结果
Si = min{ max(ways(i,h,k),ways(w-i,h,m-1-k)), k = 0… m-1 }

郭炜老师思路讲解视频:链接

代码

  • 代码使用动态规划思路解题
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int INFI = 0xfffffff;
int w,h,m;//蛋糕的宽、高, 以及需要的刀数
int dp[21][21][450];int ways(int w,int h,int m) {if(w*h < m+1) //边界 蛋糕最小是1*1的矩阵,w*h蛋糕最多可以用 w*h-1 刀来切return INFI;//无穷大if(m==0)return w*h;   // w*hif( dp[w][h][m] != 0)return dp[w][h][m];int mx = INFI;int k1,k2;//竖着切   i为切的位置 从 i到w-1 for(int i = 1; i <= w-1; i++) {//在i的位置切完后左边还要切j刀,刀数是0到m-1 for(int j = 0; j <= m-1; j++) {k1 = ways(i,h,j);    //左半边 k2 = ways(w-i,h,m-1-j);  //右边边 mx = min(mx, max(k1,k2) );}}//横着切for(int i=1; i <= h-1; i++) {for(int j = 0; j <= m-1; j++) {k1 = ways(w,i,j);k2 = ways(w,h-i,m-1-j);mx = min(mx, max(k1,k2) );}}dp[w][h][m] = mx;return mx;/*   min(sv,sh);sv = min (si ,i= 1..... w-1) si为第一刀左边宽为i的情况下最好的结果w = i       w = w-ih = h      h = hm = m-1Si = min{ max(ways(i,h,j),ways(w-i,h,m-1-j)), j = 0... m-1 }    */
}
int main() {while(cin>>w>>h>>m) {if(w==0 || h==0)break;cout<<ways(w,h,m-1)<<endl; //需要 M 个小蛋糕,必然需要切 M-1刀}return 0;
}

附上:算法入门学习方法浅谈

分蛋糕、思路视频(动态规划)相关推荐

  1. CCF201703-1 分蛋糕

    试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a 1, ...

  2. c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)

    分蛋糕 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C Description My birthd ...

  3. 两人分蛋糕,角度差最小 算法问题

    问题描述 小明和小红同月同日生,今天是他们的生日~ 但是只有一个生日蛋糕,切成了 n 块(每块是角度为 ai 的扇形). 现在他们两人要拿走连续的若干块蛋糕(最终没有蛋糕剩余).他们想知道怎样分,才能 ...

  4. 程序基本算法习题解析 分蛋糕:小明有n个蛋糕,分给k个人。若想让每个人得到的蛋糕尽量大,分出去的最小的蛋糕有多大?

    题目: 小明有n个蛋糕,分给k个人.规定如下:除了大小为1的蛋糕以外,其余大小的蛋糕均分为两个,如果蛋糕的大小是奇数,则切分成的两个蛋糕大小差一(比如大小为7的蛋糕切分成3和4两个小蛋糕).若想让每个 ...

  5. CCF-CSP 201703-1 分蛋糕 java实现

    201703-1 分蛋糕 java实现 我是一个小白,第一次写博客,可能思路有不清晰的地方,说话有点啰里啰唆的,大佬们请指正 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到 ...

  6. ccf csp分蛋糕java_CCFCSP 201703-1 分蛋糕(100score)

    CCFCSP 201703-1 分蛋糕(100score) CCFCSP 201703-1 分蛋糕(100score) 题目来源于CCFCSP 思路解答 按照序号依次读取,当累计的蛋糕量大于等于k时, ...

  7. Python入门习题(19)——CCF CSP认证考试真题:分蛋糕

    问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为 ...

  8. CCF-CSP 201703-1 试题名称: 分蛋糕

    问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n) ...

  9. CSP认证201703-1 分蛋糕[C++题解]:遍历

    题目分析 来源:acwing 分析: 本题要求是按照编号从小到大分蛋糕,不是按照蛋糕质量从小到大,读题的时候一定要小心. 编号从小到大的话,直接遍历即可,使用while来判断是否小于k,跳出while ...

  10. java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发

    最近在搞视频监控项目,需要在网页上显示实时视频,于是网上找了很多资料研究如何在网页上播放视频,一种实现方式就是开发activex控件嵌入到网页中. 如下我将介绍如何开发一个可以分屏播放视频的activ ...

最新文章

  1. python websocket异步高并发_Python3.5异步和多个websocket服务器
  2. 航天智慧物流南北分区赛通知
  3. 周末话题-元编程(metaprogramming)
  4. Hackerrank - The Grid Search
  5. 谷歌语音文本转换python代码_python - Python Google语音到文本的转换 - SO中文参考 - www.soinside.com...
  6. Apache下有效防止盗链仿下载的解决办法
  7. Socket中如何设置连接超时
  8. vue-count-to插件使用方法
  9. 【机器学习-西瓜书】九、K-means;聚类算法划分
  10. 高级软件工程第六次作业:东理三剑客团队作业-3
  11. python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...
  12. 无盘服务器uefi启动,易乐游无盘网吧客户机使用UEFI启动教程
  13. 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):生物信息学中的图表示学习:趋势、方法和应用
  14. linux u盘无损分区,Unix/Linux无损分区解决方案[原创]
  15. asp.net助学贷款管理系统
  16. html5饼图的制作方法,excel2010复合饼图制作方法
  17. 字符识别,口算题识别论文小梗概
  18. 百度 UNIT 使用
  19. 从小码农走到区块链DeFi核心,AC的加密旅程落幕
  20. 倚天鸿蒙系统,倚天屠龙记强化系统详解

热门文章

  1. [附源码]java毕业设计st音乐网站论文
  2. iTop-4412 裸机教程(一)- 从启动方式开始
  3. 自适应QP(Adaptive QP)
  4. 计算机二级WPS Office考试大纲2021年
  5. 学生信息管理系统python面向对象_Python学员管理系统【面向对象实现】
  6. python实现工作流审批_工作流和审批流
  7. android8.0系统 原生,羡慕原生安卓8.0?索尼XPZ系统占用11GB苦不堪言
  8. 口袋的天空(Kruscal)
  9. [Life] search torrent engineer
  10. 北大才女刘媛媛4分44秒演讲