017:分蛋糕

总Time Limit:   1000ms         Memory Limit:    65536kB

Description

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

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

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

    

Input

共有多行,每行表示一个测试案例。每行是三个用空格分开的整数w, h, m ,其中1 ≤ w, h, m ≤ 20 , m ≤ wh. 当 w = h = m = 0 时不需要处理,表示输入结束。

Output

每个测试案例的结果占一行,输出一个整数,表示最大蛋糕块的面积下限。

Sample Input

4 4 4
4 4 3
0 0 0

Sample Output

4
6
#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int INFI = 10000000;//好大的一个值int W,H,M;//宽,高
int minMax[30][30][410];//记忆数组int Dfs(int w,int h,int m) //切m刀
{if( w * h - 1 < m)//当前面积无法切m刀return INFI;if( m == 0) //出口:最终这才是最初return w * h;//if( minMax[w][h][m] != -1) //已访问过:使用记忆数组加快速度return minMax[w][h][m];int mx = INFI;for( int i = 1; i <= w -1; ++i ) { //枚举第一刀的竖着切的各种切法:注意只是切了一刀for( int k = 0; k <= m-1; ++ k ) { //枚举左边的切法int m1 = Dfs(i,h,k); //左边切k刀得到的最大面积的最小值int m2 = Dfs(w-i,h,m-1-k);//右边切了m-1-k刀得到的最大面积的最小值:至此m刀切完mx = min(mx,max(m1,m2));//核心:先最大值再最小值}}for( int i = 1; i <= h -1; ++i ) {  //枚举第一刀的横着切的各种切法for( int k = 0; k <= m-1; ++ k ) { //枚举上半边接下来被切成k+1块的各种切法int m1 = Dfs(w,i,k);//上边切k刀得到的最大面积的最小值int m2 = Dfs(w,h-i,m-1-k);//下边切h-1-k刀得到的最大面积的最小值mx = min(mx,max(m1,m2));}}minMax[w][h][m] = mx;//至此此类情况才算枚举完将结果存起来return mx;
}int main()
{while(true) {cin >> W >> H >> M; //多组输入if( W == 0 && H == 0)//终止条件break;memset(minMax,-1,sizeof(minMax));//初始化cout << Dfs(W,H,M-1) << endl;}return 0;
}
#include <iostream>
#include <cstdio>
#include <cstring>using namespace std;const int INF = 0x3f3f3f3f;
int MinS[22][22][22];   //MinS[i][j][k]表示将i*j的蛋糕分为k+1块(切k刀)最大的那块蛋糕的面积下限
int main()
{int w,h,m;while(cin >> w >> h >> m && (w || h || m)) {memset(MinS,INF,sizeof MinS);for(int i=1;i<=w;i++) {//枚举宽度for(int j=1;j<=h;j++) { //枚举高度for(int k=0;k<=m-1;k++) {//枚举需切得刀数if(k == 0)//当一块蛋糕不分时,自己即最大MinS[i][j][k] = i*j;else if(k > i*j-1)//分不了,因为求最小,那么失败设为无穷大MinS[i][j][k] = INF;else {for(int r=1;r<=i-1;r++)//枚举第一刀横着切得位置:此时j全程不变for(int kk=0;kk<=k-1;kk++)//还剩k-1刀切MinS[i][j][k] = min(MinS[i][j][k],max(MinS[r][j][kk],MinS[i-r][j][k-kk-1]));for(int c=1;c<=j-1;c++)//枚举第一刀竖着切得位置:此时i全程不变for(int kk=0;kk<=k-1;kk++)//还剩k-1刀切MinS[i][j][k] = min(MinS[i][j][k],max(MinS[i][c][kk],MinS[i][j-c][k-kk-1]));}}}}cout << MinS[w][h][m-1] << endl;}return 0;
}

OpenJudge -6047 :分蛋糕相关推荐

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

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

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

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

  3. CCF - 201703-1 - 分蛋糕

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

  4. CCF201703-1 分蛋糕

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

  5. CCF CSP 201703-1 分蛋糕

    题目链接:http://118.190.20.162/view.page?gpid=T57 问题描述 试题编号: 201703-1 试题名称: 分蛋糕 时间限制: 1.0s 内存限制: 256.0MB ...

  6. CCF201703-1 分蛋糕(100分)【序列处理】

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

  7. CCF201703-1 分蛋糕(100分)

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

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

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

  9. Python-CSP 201703-1 分蛋糕

    文章目录 一.题目 二.算法思想 三.代码 一.题目 二.算法思想 在分蛋糕的时候,是根据已经给的蛋糕中从编号最小的分到编号最大的 使用列表cake来存储这些蛋糕对应的重量,每次分蛋糕时都分出去编号为 ...

  10. CCF 201703-1分蛋糕

    CCF 201703-1分蛋糕 问题描述 小明今天生日,他有n块蛋糕要分给朋友们吃,这n块蛋糕(编号为1到n)的重量分别为a1, a2, -, an.小明想分给每个朋友至少重量为k的蛋糕.小明的朋友们 ...

最新文章

  1. 浅谈Java的输入输出流
  2. 重构一个功能块的总结
  3. elasticsearch7.9.2 安装配置
  4. 《终身成长》读书笔记(part3)--如果一个人能学会什么东西,那么世界上其他人也都可以学会
  5. 前端学习(576):margin无效情形之内联特性导致无效
  6. EISCONN的故事
  7. iif能用到mysql中吗_数据库基础知识:SQL中的IIF语句详解
  8. python restful风格_总结python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
  9. Delphi 7序列号过期的解决方法
  10. Lenovo System x 硬件Windows Server驱动下载
  11. 线性代数 第二章 矩阵 知识点总结(Jeff自我感悟)
  12. 注册.ocx控件时,提示“模块已加载,但对dllregisterserver的调用失败,错误代码为0x80040200 ”
  13. UltraEdit使用正则表达式(通配符)进行查找和替换
  14. androidnbsp;软件apk
  15. C++ exception with description “bad optional access“ thrown in the test body.
  16. 服务器被黑客攻击和被挖矿之后的SSH安全防御 | SSH security defense after server is hacked and mined
  17. 原生js中attributes属性
  18. Python 实现动态解析阿里云DNS记录
  19. UltraEdit v14.00注册码
  20. Ext4.0源码解读(分享二)

热门文章

  1. 教你怎么用Mono Cecil - 动态注入 (注意代码的注释)
  2. UNreal 创建一个简单的玻璃材质+金属材质+创建材质实例
  3. JAva继承编写自行车例子,java – Freemarker中的继承/实例检查
  4. C++:实现量化exchangerate汇率测试实例
  5. 网络历史之金融投资三剑客01
  6. win10如何删除输入法_30秒解决Win10下输入法栏消失无法输入中文的难题
  7. 计算机图形学——反走样技术
  8. 点源时域麦克斯韦方程AI求解
  9. 蓬莱小课:HR问“你的职业规划是什么”,这样回答90%不出错
  10. 悟空遥控器 android 5.1,悟空遥控器服务端