切蛋糕

描述

有一块矩形蛋糕,宽和高分别是整数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;}
}

算法实践:切蛋糕(动态规划)相关推荐

  1. c语言切蛋糕问题算法,从“切蛋糕问题”谈到欧拉#

    从"切蛋糕问题"谈到欧拉在图论上的贡献 这个作者敬业,不得不发... 从圣诞节到新年之间,我们有几天假期.我们几个老朋友就选择一个晚上,各自准备点吃的东西欢聚在一起.吃吃喝喝完后, ...

  2. 漫画:有趣的 “切蛋糕“ 问题

    -----  第二天  ----- 举个例子: 我们有5块蛋糕, 蛋糕的大小分别是 5,17,25,3,15 我们有7位顾客, 他们的饭量分别是 2,5,7,9,12,14,20 (每个蛋糕大小和顾客 ...

  3. AI在中国,还没到抢切蛋糕的时候

    李根 发自 凹非寺  量子位 报道 | 公众号 QbitAI 他们中的不少名字,之前并不广为人知. 刘全全.王宇杰.王昌宝.帅靖文.张顺丰.蒋尚达.余革年.闵可锐.宋洪伟.李晓普.张晓伟.王峰.董倩倩 ...

  4. 算法--01背包问题(动态规划算法) 21-01-30

    问题简述: 给定n种物品和一个容量为C的背包,物品mi的重量为wi,价值为vi,如何分配背包空间使得装入背包的物品总价值最大? 动态规划: 本算法归属于解决动态规划问题,动态规划(Dynamic Pr ...

  5. 牛客练习赛105(A切蛋糕的贝贝、B抱歉,这没有集美、D点分治分点)

    A切蛋糕的贝贝 题目链接 关键点: 1.题目已经定下来了切的块数,即六块,且比例为1:1:4:5:1:4,那么只有刚刚好为题目要求的比例的倍数,才可以切.1+1+4+5+1+4 = 16,即为16的倍 ...

  6. 深度学习算法实践(基于Theano和TensorFlow)

    深度学习算法实践(基于Theano和TensorFlow) 闫涛 周琦 著 ISBN:9787121337932 包装:平装 开本:16开 用纸:胶版纸 正文语种:中文 出版社:电子工业出版社 出版时 ...

  7. 五大常用算法之二:动态规划算法

    基本概念 动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移.一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划. 基本思想与策略 基本思想与分 ...

  8. 人脸验证 DeepID 算法实践

    人脸验证 DeepID 算法实践 4,610 次阅读 - 文章 作者:雨石  出处:雨石的博客 目前人脸验证算法可以说是DeepID最强,本文使用theano对DeepID进行实现.关于deepid的 ...

  9. SDCC 2015算法专场札记:知名互联网公司的算法实践

    SDCC 2015算法专场札记:知名互联网公司的算法实践 发表于4小时前|526次阅读| 来源作者投稿|0 条评论| 作者张俊林 SDCC算法架构大数据京东腾讯 摘要:11月21日,为期三天的SDCC ...

最新文章

  1. 【Linux基础】查看硬件信息-内存和硬盘
  2. 社区网站功能实现系列(三):社区页面无刷新回发的一种实现方式
  3. 缓冲区溢出基本C程序的控制台和Win32版本
  4. spring源码分析之@Conditional
  5. 嵌入式编程-C语言使用小技巧
  6. 关于vue打包的问题
  7. centos7 下安装Poco
  8. OpenCV鼠标事件和滑动条事件
  9. sublime双击选中$
  10. 阶段3 1.Mybatis_01.Mybatis课程介绍及环境搭建_07.环境搭建的注意事项
  11. Windows访问samba:\\IP不行,那就\\IP\共享名
  12. 如何安装Ruby(Windows)
  13. ad采样信噪比与噪声_软件ad和硬件滤波 ad采样硬件滤波电路
  14. 【ACO MTSP】基于matlab粒子群优化蚁群算法求解多旅行商问题【含Matlab源码 1616期】
  15. Ubuntu16.04 安装LSD-SLAM
  16. 【会声会影教学】如何更改短视频速度
  17. 自动合并table中相同的单元格以及java自动合并excel相同单元格
  18. lstm 文本纠错_中文文本纠错算法--错别字纠正的二三事
  19. 带你掌握最常用的数据分析图表
  20. matlab 怎样画颜色渐变曲线

热门文章

  1. qq 营销,微信营销,微博营销
  2. 推荐5个非常酷的医疗健康APP
  3. 50岁的哆啦A梦撞上63岁的卡西欧,数据中台告诉你火花有多大
  4. Ajax省市地区下拉列表三级联动
  5. 化学lims实验室信息管理系统推荐
  6. 环境变量用来保存java虚拟机_环境变量用来存储JAVA的编译和运行工具所在路径,而 环境变量则用来保存Java虚拟机要运行的“.class”文件路径。...
  7. 帆软亮相数博会:为企业发展提供“导航”
  8. 2020市政方向-通用基础(质量员)考试软件及市政方向-通用基础(质量员)模拟考试软件
  9. IOS已解决 在构建版本上传后, 一直处于处理状态
  10. 200smart第二课基本编程