算法实践:切蛋糕(动态规划)
切蛋糕
描述
有一块矩形蛋糕,宽和高分别是整数w、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且宽和高均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。请计算:最后得到的m块蛋糕中,最大的那块蛋糕的面积下限。
输入
共有多行,每行表示一个测试案例。
每行是三个用空格分开的整数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
难度
高,动态规划
解法
三维空间的填表法,每一刀要么横着切要么竖着切,将w*h的蛋糕分为m块可以看做切m-1刀。而切每一刀时又可分成已经切m-1刀的子问题。递归式为:
建立三维数组,largest [i] [j] [k],表示将i * j的蛋糕分为k+1块(切k刀)所得的最大面积;
k = 0 largest [i] [j] [k] = i*j
k+1 > i*J largest [i] [j] [k] =INF 切太多归与无穷
剩下情况枚举横切和竖切…
代码
#include <bits/stdc++.h>
using namespace std;
//largets[i][j][k]表示将i*j的蛋糕分为k+1块(切k刀)最大的那块蛋糕的面积下限
#define INF 0x3f3f3f3f //无穷
int main()
{int l,w,m;while(cin>>l>>w>>m && (l||w||m)){int largets[l+1][w+1][m+1];memset(largets,INF, sizeof(largets));for(int i=0;i<=l;i++)for(int j=0;j<=w;j++)for(int k=0;k<=m;k++){if(k==0)largets[i][j][k]=i*j; //蛋糕不分时,本身最大else if(i*j<k+1) //切的太多,不够分largets[i][j][k]=INF;else{for(int r=1;r<i;r++) //横着切for (int kk=0;kk<k;kk++) //剩下左边切几刀,右边切几刀,全部枚举largets[i][j][k]=min(largets[i][j][k],max(largets[r][j][kk],largets[i-r][j][k-kk-1]));for(int c=1;c<j;c++)//竖着切for (int kk=0;kk<k;kk++) //左右切出来最大的面积,与当前最小值面积比较largets[i][j][k]=min(largets[i][j][k],max(largets[i][c][kk],largets[i][j-c][k-kk-1]));}}cout<<largets[l][w][m-1]<<endl;}
}
算法实践:切蛋糕(动态规划)相关推荐
- c语言切蛋糕问题算法,从“切蛋糕问题”谈到欧拉#
从"切蛋糕问题"谈到欧拉在图论上的贡献 这个作者敬业,不得不发... 从圣诞节到新年之间,我们有几天假期.我们几个老朋友就选择一个晚上,各自准备点吃的东西欢聚在一起.吃吃喝喝完后, ...
- 漫画:有趣的 “切蛋糕“ 问题
----- 第二天 ----- 举个例子: 我们有5块蛋糕, 蛋糕的大小分别是 5,17,25,3,15 我们有7位顾客, 他们的饭量分别是 2,5,7,9,12,14,20 (每个蛋糕大小和顾客 ...
- AI在中国,还没到抢切蛋糕的时候
李根 发自 凹非寺 量子位 报道 | 公众号 QbitAI 他们中的不少名字,之前并不广为人知. 刘全全.王宇杰.王昌宝.帅靖文.张顺丰.蒋尚达.余革年.闵可锐.宋洪伟.李晓普.张晓伟.王峰.董倩倩 ...
- 算法--01背包问题(动态规划算法) 21-01-30
问题简述: 给定n种物品和一个容量为C的背包,物品mi的重量为wi,价值为vi,如何分配背包空间使得装入背包的物品总价值最大? 动态规划: 本算法归属于解决动态规划问题,动态规划(Dynamic Pr ...
- 牛客练习赛105(A切蛋糕的贝贝、B抱歉,这没有集美、D点分治分点)
A切蛋糕的贝贝 题目链接 关键点: 1.题目已经定下来了切的块数,即六块,且比例为1:1:4:5:1:4,那么只有刚刚好为题目要求的比例的倍数,才可以切.1+1+4+5+1+4 = 16,即为16的倍 ...
- 深度学习算法实践(基于Theano和TensorFlow)
深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...
- 五大常用算法之二:动态规划算法
基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 基本思想与策略 基本思想与分 ...
- 人脸验证 DeepID 算法实践
人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石 出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...
- SDCC 2015算法专场札记:知名互联网公司的算法实践
SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...
最新文章
- 【Linux基础】查看硬件信息-内存和硬盘
- 社区网站功能实现系列(三):社区页面无刷新回发的一种实现方式
- 缓冲区溢出基本C程序的控制台和Win32版本
- spring源码分析之@Conditional
- 嵌入式编程-C语言使用小技巧
- 关于vue打包的问题
- centos7 下安装Poco
- OpenCV鼠标事件和滑动条事件
- sublime双击选中$
- 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_07.环境搭建的注意事项
- Windows访问samba:\\IP不行,那就\\IP\共享名
- 如何安装Ruby(Windows)
- ad采样信噪比与噪声_软件ad和硬件滤波 ad采样硬件滤波电路
- 【ACO MTSP】基于matlab粒子群优化蚁群算法求解多旅行商问题【含Matlab源码 1616期】
- Ubuntu16.04 安装LSD-SLAM
- 【会声会影教学】如何更改短视频速度
- 自动合并table中相同的单元格以及java自动合并excel相同单元格
- lstm 文本纠错_中文文本纠错算法--错别字纠正的二三事
- 带你掌握最常用的数据分析图表
- matlab 怎样画颜色渐变曲线
热门文章
- qq 营销,微信营销,微博营销
- 推荐5个非常酷的医疗健康APP
- 50岁的哆啦A梦撞上63岁的卡西欧,数据中台告诉你火花有多大
- Ajax省市地区下拉列表三级联动
- 化学lims实验室信息管理系统推荐
- 环境变量用来保存java虚拟机_环境变量用来存储JAVA的编译和运行工具所在路径,而 环境变量则用来保存Java虚拟机要运行的“.class”文件路径。...
- 帆软亮相数博会:为企业发展提供“导航”
- 2020市政方向-通用基础(质量员)考试软件及市政方向-通用基础(质量员)模拟考试软件
- IOS已解决 在构建版本上传后, 一直处于处理状态
- 200smart第二课基本编程