分蛋糕、思路视频(动态规划)
分蛋糕问题
总时间限制: 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;
}
附上:算法入门学习方法浅谈
分蛋糕、思路视频(动态规划)相关推荐
- CCF201703-1 分蛋糕
试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a 1, ...
- c语言分蛋糕均匀正方形,分蛋糕(C - 二分查找)
分蛋糕 题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=85904#problem/C Description My birthd ...
- 两人分蛋糕,角度差最小 算法问题
问题描述 小明和小红同月同日生,今天是他们的生日~ 但是只有一个生日蛋糕,切成了 n 块(每块是角度为 ai 的扇形). 现在他们两人要拿走连续的若干块蛋糕(最终没有蛋糕剩余).他们想知道怎样分,才能 ...
- 程序基本算法习题解析 分蛋糕:小明有n个蛋糕,分给k个人。若想让每个人得到的蛋糕尽量大,分出去的最小的蛋糕有多大?
题目: 小明有n个蛋糕,分给k个人.规定如下:除了大小为1的蛋糕以外,其余大小的蛋糕均分为两个,如果蛋糕的大小是奇数,则切分成的两个蛋糕大小差一(比如大小为7的蛋糕切分成3和4两个小蛋糕).若想让每个 ...
- CCF-CSP 201703-1 分蛋糕 java实现
201703-1 分蛋糕 java实现 我是一个小白,第一次写博客,可能思路有不清晰的地方,说话有点啰里啰唆的,大佬们请指正 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到 ...
- ccf csp分蛋糕java_CCFCSP 201703-1 分蛋糕(100score)
CCFCSP 201703-1 分蛋糕(100score) CCFCSP 201703-1 分蛋糕(100score) 题目来源于CCFCSP 思路解答 按照序号依次读取,当累计的蛋糕量大于等于k时, ...
- Python入门习题(19)——CCF CSP认证考试真题:分蛋糕
问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为 ...
- CCF-CSP 201703-1 试题名称: 分蛋糕
问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n) ...
- CSP认证201703-1 分蛋糕[C++题解]:遍历
题目分析 来源:acwing 分析: 本题要求是按照编号从小到大分蛋糕,不是按照蛋糕质量从小到大,读题的时候一定要小心. 编号从小到大的话,直接遍历即可,使用while来判断是否小于k,跳出while ...
- java 视频监控 分屏ui_视频监控网页ActiveX视频分屏播放控件开发
最近在搞视频监控项目,需要在网页上显示实时视频,于是网上找了很多资料研究如何在网页上播放视频,一种实现方式就是开发activex控件嵌入到网页中. 如下我将介绍如何开发一个可以分屏播放视频的activ ...
最新文章
- python websocket异步高并发_Python3.5异步和多个websocket服务器
- 航天智慧物流南北分区赛通知
- 周末话题-元编程(metaprogramming)
- Hackerrank - The Grid Search
- 谷歌语音文本转换python代码_python - Python Google语音到文本的转换 - SO中文参考 - www.soinside.com...
- Apache下有效防止盗链仿下载的解决办法
- Socket中如何设置连接超时
- vue-count-to插件使用方法
- 【机器学习-西瓜书】九、K-means;聚类算法划分
- 高级软件工程第六次作业:东理三剑客团队作业-3
- python文本框与数据库的关联_Python 基于python+mysql浅谈redis缓存设计与数据库关联数据处理...
- 无盘服务器uefi启动,易乐游无盘网吧客户机使用UEFI启动教程
- 知识图谱-生物信息学-医学顶刊论文(Briefings in Bioinformatics-2021):生物信息学中的图表示学习:趋势、方法和应用
- linux u盘无损分区,Unix/Linux无损分区解决方案[原创]
- asp.net助学贷款管理系统
- html5饼图的制作方法,excel2010复合饼图制作方法
- 字符识别,口算题识别论文小梗概
- 百度 UNIT 使用
- 从小码农走到区块链DeFi核心,AC的加密旅程落幕
- 倚天鸿蒙系统,倚天屠龙记强化系统详解
热门文章
- [附源码]java毕业设计st音乐网站论文
- iTop-4412 裸机教程(一)- 从启动方式开始
- 自适应QP(Adaptive QP)
- 计算机二级WPS Office考试大纲2021年
- 学生信息管理系统python面向对象_Python学员管理系统【面向对象实现】
- python实现工作流审批_工作流和审批流
- android8.0系统 原生,羡慕原生安卓8.0?索尼XPZ系统占用11GB苦不堪言
- 口袋的天空(Kruscal)
- [Life] search torrent engineer
- 北大才女刘媛媛4分44秒演讲