生日蛋糕
Time Limit: 1000MS   Memory Limit: 10000K
Total Submissions: 16191   Accepted: 5751

Description

7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 
设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。 
由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 
令Q = Sπ 
请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 
(除Q外,以上所有数据皆为正整数) 

Input

有两行,第一行为N(N <= 10000),表示待制作的蛋糕的体积为Nπ;第二行为M(M <= 20),表示蛋糕的层数为M。

Output

仅一行,是一个正整数S(若无解则S = 0)。

Sample Input

100
2

Sample Output

68

Hint

圆柱公式 
体积V = πR2
侧面积A' = 2πRH 
底面积A = πR2 
解题思路:首先肯定是对于每一层,枚举R和H,接下来就是剪枝了,如果当前剩余的体积比能够取到的最小的体积还要小,那么肯定不要再搜下去了;如果当前的表面积已经比已知的最小面积还要大,剪枝(这点很容易想到);如果当前得到的表面积+之后能够得到的最小的表面积>已知的最小面积,剪枝(这一点很难想,假设已经涂了s,那么还剩下rest_s = sum{2*Ri*Hi} >= sum(2*Ri*Ri*Hi/Rk} = 2*(V-v)/r (设k为当前层的半径))。
AC:
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;const int inf = 0x3f3f3f3f;
int n,m,ans,tmp,sumv[30];void dfs(int v,int dep,int R,int H)
{if(dep == 0){if(v == 0 && ans > tmp) ans = tmp;return;}if(v - sumv[dep-1] < 0 || tmp >= ans || 2*v/R + tmp >= ans) return;for(int r = R-1; r >= dep; r--){int Hm = min(H-1,(v-sumv[dep-1])/r/r);for(int h = Hm; h >= dep; h--){if(dep == m) tmp = r*r;tmp += 2*r*h;dfs(v-r*r*h,dep-1,r,h);tmp -= 2*r*h;}}
}int main()
{sumv[1] = 1;for(int i = 2; i <= 20; i++)sumv[i] = sumv[i-1] + i*i*i;while(scanf("%d%d",&n,&m)!=EOF){ans = inf;dfs(n,m,n+1,n+1);printf("%d\n",ans);}return 0;
}

poj 1190(剪枝)相关推荐

  1. poj 1190 生日蛋糕

    poj 1190 生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17460 Accepted: 6221 Descri ...

  2. POJ 1190 生日蛋糕 【DFS + 极限剪枝】

    题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...

  3. POJ - 1190 - 生日蛋糕 (深搜剪枝)

    链接: http://poj.org/problem?id=1190 思路: 剪枝. 1.从半径n+1开始 2.当前已有表面积,加上剩余的预估最小表面积,若大于最优解,减掉.(什么是预估最小解?高度每 ...

  4. POJ - 1190 生日蛋糕(dfs+剪枝)

    题目链接:点击查看 题目大意:给出生日蛋糕的总体积,以及有多少层,我们要求下面的每一层的高度和半径都要比上面一层的大,并且都是整数,求满足要求的最小表面积 题目分析:因为题目提到了半径和高度都是整数, ...

  5. poj 1190 生日蛋糕 难|供自己瞻仰

    7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...

  6. ACM题集以及各种总结大全(转)

    ACM题集以及各种总结大全! 虽然退役了,但是整理一下,供小弟小妹们以后切题方便一些,但由于近来考试太多,顾退役总结延迟一段时间再写!先写一下各种分类和题集,欢迎各位大牛路过指正. 一.ACM入门 关 ...

  7. ACM第七次测验(图论)

     poj 1190 生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 17882 Accepted: 6363 Descr ...

  8. 源哥每日一题第十七弹 poj 1568 Alpha-Beta剪枝

    链接:http://poj.org/problem?id=1568 题目:为什么是英文啊题目就是给你一个4*4的OX棋盘,上面已经下了一些棋,然后现在轮到X下,问你有没有一个必胜的方法,有的话就输出坐 ...

  9. 搜索 + 剪枝 --- POJ 1101 : Sticks

    Sticks Problem's Link:   http://poj.org/problem?id=1011 Mean: http://poj.org/problem?id=1011&lan ...

最新文章

  1. R语言使用ggplot2包的快速可视化函数qplot绘制分组点图(带状图)并配置分组颜色实战
  2. 趣谈网络协议笔记-二(第十六讲上)
  3. java 序列化概念和作用_结合代码详细解读Java序列化与反序列化概念理解
  4. 数学狂想曲(三)——统计杂谈, PID算法, 20世纪10大算法, 矩阵向量的积
  5. python源码笔记_python源码学习笔记(一)
  6. nginx对websocket的支持及uliweb chatroom的测试
  7. 逻辑表达式——黑纸白纸
  8. VB-VB.NET中 从字符串“XX”到类型“Double”的转换无效
  9. linux主机熵值过小,tomcat在linux启动应用慢解决方式
  10. 72. 编辑距离(JavaScript)
  11. Vue实例和生命周期 1
  12. 基础佛学知识-间歇博客
  13. Map的使用和遍历方法示例
  14. Android手机OCR+扫描APP
  15. 水滴筹、轻松筹干架,从线上到线下:员工医院互殴引围观
  16. Frame Bounds 区别
  17. 大数据分析技术与应用
  18. 94个比付费软件更好的免费软件(转载)
  19. Centos7.6升级到Centos8.0
  20. double scanf输入时用%lf而printf用%f或%lf原理

热门文章

  1. 菜鸟学Linux 第007篇笔记 简单命令的使用讲解(文本、时间、目录)
  2. statCVS的问题剖析
  3. 文件创建和删除命令:touch、rm
  4. ASMSupport教程4.2
  5. 一种简便的ios图片加密方法-对图片进行base64编码
  6. 运行windows live writer时发生“意外错误”
  7. 疯了,家里的网速慢的不是一星半点
  8. Ajax.NET 作者发布支持Visual Web Developer 2005的模板安装
  9. 4E4 models
  10. give girls more options to choose