分蛋糕

简介: 总时间限制: 1000ms 内存限制: 65536kB描述有一块矩形大蛋糕,长和宽分别是整数w 、h。现要将其切成m块小蛋糕,每个小蛋糕都必须是矩形、且长和宽均为整数。切蛋糕时,每次切一块蛋糕,将其分成两个矩形蛋糕。
总时间限制: 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

算法分析:
直接枚举DP 
f[i][j][k]表示把i*j分成k块蛋糕时,最大的那块蛋糕的面积下限(最小值)。
枚举横切竖切形成的新蛋糕即可

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 #define N 25
 5 #define INF 5005
 6 int f[N][N][N];int w,h,m;
 7 int main(){
 8     w=h=m=20;
 9     for(int i=1;i<=w;i++){
10         for(int j=1;j<=h;j++){
11             f[i][j][1]=i*j;
12             for(int k=2;k<=m;k++){
13                 f[i][j][k]=INF;
14                 for(int r=1;r<i;r++){
15                     f[i][j][k]=min(f[i][j][k],max(f[r][j][k-1],(i-r)*j));
16                     for(int p=1;p<k;p++)
17                         f[i][j][k]=min(f[i][j][k],max(f[r][j][p],f[i-r][j][k-p]));
18                 }
19 
20                 for(int c=1;c<j;c++){
21                     f[i][j][k]=min(f[i][j][k],max(f[i][c][k-1],(j-c)*i));
22                     for(int p=1;p<k;p++)
23                         f[i][j][k]=min(f[i][j][k],max(f[i][c][p],f[i][j-c][k-p]));
24                 }
25             }
26         }
27     }
28     while(scanf("%d%d%d",&w,&h,&m)&&(w||h||m)){
29         printf("%d\n",f[w][h][m]);}
30     return 0;
31 }

来源:http://blog.csdn.net/qq_18455665/article/details/50512764



 

相关文章
|
9月前
|
监控 Cloud Native Java
基于阿里云容器服务(ACK)的微服务架构设计与实践
本文介绍如何利用阿里云容器服务Kubernetes版(ACK)构建高可用、可扩展的微服务架构。通过电商平台案例,展示基于Java(Spring Boot)、Docker、Nacos等技术的开发、容器化、部署流程,涵盖服务注册、API网关、监控日志及性能优化实践,帮助企业实现云原生转型。
|
监控 Serverless API
利用云函数实现后端服务的无服务器化
【10月更文挑战第7天】本文介绍了无服务器架构中的核心组件——云函数,探讨了其概念、优势及应用。云函数使开发者能在无需管理服务器的情况下运行代码,具备自动扩展、成本效益、快速迭代和聚焦业务逻辑等优势。文章还详细说明了实施云函数的步骤,并分享了实战技巧,旨在帮助读者更好地理解和应用这一技术。
|
存储 缓存 算法
深入解析B树:数据结构、存储结构与算法优势
深入解析B树:数据结构、存储结构与算法优势
|
算法 JavaScript 前端开发
在JavaScript中实现基本的碰撞检测算法,我们通常会用到矩形碰撞检测,也就是AABB(Axis-Aligned Bounding Box)碰撞检测
【6月更文挑战第16天】JavaScript中的基本碰撞检测涉及AABB(轴对齐边界框)方法,常用于2D游戏。`Rectangle`类定义了矩形的属性,并包含一个`collidesWith`方法,通过比较边界来检测碰撞。若两矩形无重叠部分,四个条件(关于边界相对位置)均需满足。此基础算法适用于简单场景,复杂情况可能需采用更高级的检测技术或物理引擎库。
322 6
|
算法 程序员 编译器
Python包问题大集结
【6月更文挑战第21天】Python包问题大集结
160 0
|
12月前
|
机器学习/深度学习 人工智能 搜索推荐
AI技术在医疗领域的应用####
本文探讨了人工智能(AI)技术在医疗领域的创新应用及其带来的革命性变化。通过分析AI在疾病诊断、个性化治疗、药物研发和患者管理等方面的具体案例,展示了AI如何提升医疗服务的效率和准确性。此外,文章还讨论了AI技术面临的挑战与伦理问题,并展望了未来的发展趋势。 ####
|
12月前
|
人工智能 Cloud Native 算法
|
数据挖掘 BI 数据处理
FineBI在线学习资源-数据处理
FineBI在线学习资源-数据处理
237 1
|
Rust 安全 算法
揭秘Rust语言如何重塑区块链安全:打造坚不可摧的分布式账本新篇章!
【8月更文挑战第31天】自比特币诞生以来,区块链技术凭借其去中心化和不可篡改的特点备受关注。为了应对安全性挑战,Rust 语言凭借其内存安全特性逐渐成为区块链开发的优选。本文探讨了 Rust 如何助力区块链实现更安全的分布式账本。通过示例展示了 Rust 在避免内存泄漏、空指针引用及数据竞争等方面的优势,预示着 Rust 在高性能、高安全性需求的区块链应用中拥有广阔前景。
347 2
下一篇
开通oss服务