POJ1190 生日蛋糕
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 18103 | Accepted: 6439 |
Description
设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。
由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。
令Q = Sπ
请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。
(除Q外,以上所有数据皆为正整数)
Input
Output
Sample Input
100 2
Sample Output
68
Hint
体积V = πR2H
侧面积A' = 2πRH
底面积A = πR2
Source
又见花式大剪枝。
1、从半径=n+1开始搜
2、当前已有表面积,加上之后层的预估最小表面积,若大于最优解,减掉。
3、当前已有体积,加上之后层的预估最小体积,若大于最优解,减掉。
4、搜索途中,若体积超出限制,减掉(大概不会生效)
只用上面这些,只能拿到70分(在洛谷测的)
然后遍寻题解,找到了神奇的剪枝5:(目标体积-已有体积)/r*2+已有表面积>=ans,加上以后0ms AC,简直可怕。
1 /*by SilverN*/ 2 #include<iostream> 3 #include<algorithm> 4 #include<cstring> 5 #include<cstdio> 6 #include<cmath> 7 using namespace std; 8 const int mxn=30; 9 int ms[mxn],mv[mxn]; 10 int n,m; 11 int ans; 12 void DFS(int smm,int v,int dep,int h,int r){//表面积 体积 层数 高 半径 13 if(v>n)return; 14 if(!dep){ 15 if(v==n && smm<ans)ans=smm; 16 return; 17 } 18 if(v+mv[dep-1]>n || smm+ms[dep-1]>ans || (n-v)/r*2+smm>=ans)return;//剪枝 19 for(int i=r-1;i>=dep;--i){//半径 20 if(dep==m)smm=i*i;//上表面的总面积 21 int mxh=min((n-v-mv[dep-1])/(i*i),h-1); 22 for(int j=mxh;j>=dep;--j){//高度 23 DFS(smm+2*i*j ,v+i*i*j ,dep-1,j,i); 24 } 25 } 26 return; 27 } 28 void init(){ 29 for(int i=1;i<=20;i++){ 30 ms[i]=ms[i-1]+i*i*2;//最小侧面积 31 mv[i]=mv[i-1]+i*i*i;//最小体积 32 } 33 return; 34 } 35 int main(){ 36 init (); 37 int i,j; 38 scanf("%d%d",&n,&m); 39 ans=1e9; 40 DFS(0,0,m,n+1,n+1); 41 if(ans==1e9)ans=0; 42 printf("%d\n",ans); 43 return 0; 44 }
转载于:https://www.cnblogs.com/SilverNebula/p/5971785.html
POJ1190 生日蛋糕相关推荐
- POJ1190 生日蛋糕(回溯法)
cuicuiv-POJ刷题 点击此处跳转原题界面---->生日蛋糕 回溯法:是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就 ...
- POJ-1190 生日蛋糕(dfs+剪枝)
生日蛋糕 题目链接http://poj.org/problem?id=1190 Time Limit: 1000MS Memory Limit: 10000K Description 7月17日是Mr ...
- poj1190 生日蛋糕 dfs
传送门:poj1190 由于高度和半径都是整数因此可以用bfs来做,关键是如何剪枝.由于蛋糕是一层层摞上去的,而最底层下底面面积又不算,因此所有底面积的和就相当于一个底面积,即最下面那一层的上底面的面 ...
- 高级搜索题集(夏天的风分类)
基础的搜索BFS和DFS,自己找题切吧... 高级搜索的题集就在下面,自己看着办吧... 努力爆搜,努力剪枝吧~~~ [Level 1] HDOJ-1429 胜利大逃亡(续) 迷宫问题,有钥匙和 ...
- poj1190深搜 生日蛋糕
题意: 让你制作一个蛋糕,这个蛋糕有m层,而且每层都是圆柱形,并且每一层都必须满足 ri>ri+1 && hi > hi+1,然后给出蛋糕的总体积是n*PI,还有 ...
- c++画蛋糕_poj1190 生日蛋糕 dfs
题意:生日蛋糕有m层,总体积是V.从下向上,每一层的半径r和高度h都是递减的. 给m.v,求最小的表面积s.(不算底面接地的面积) 题目链接:poj1190 剪枝都还没加..样例输出都是错的...还没 ...
- POJ 1190 生日蛋糕 【DFS + 极限剪枝】
题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...
- 用python绘制漂亮的图形-用Python代码绘制漂亮的生日蛋糕,python
#如何用python绘制生日蛋糕? 平时在经常在b站看到up主绘制生日蛋糕的精美图片.以前学过c.c++语言,也想着用C去绘制一些生日蛋糕,绘制一些女神喜欢的小礼物,不过实现起来比较麻烦,刚好学了一些 ...
- poj 1190 生日蛋糕 难|供自己瞻仰
7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当 ...
最新文章
- bigdecimal不等于0怎么写_创业计划书不知道怎么写?掌握核心逻辑是关键
- 浅谈WebKit之WebCore
- HDU2227(非降子序列的个数)
- 逐步解析:杨辉三角(C语言)
- ***redis linux 命令使用总结
- 计算机的编程发源地,计算机编程: C典型上机试题
- phpstudy运行PHP项目出现404怎么办?
- 爱因斯坦那颗大脑,究竟隐藏了什么
- python全局名称空间_21、Python之名称空间与作用域
- SLAM入门-相机成像原理与公式推导
- 红帽linux oracle,Oracle Linux与红帽Linux对比
- 为激励英特尔建厂 美国俄亥俄州拿出20亿美元优惠政策
- 路由器修改dns服务器,路由器DNS怎么设置如何修改路由器DNS服务器地址
- 虚拟化介绍及Docker与传统虚拟化有什么区别
- MAC下虚拟机PD转换成win上可以用的vmware
- 研华运动控制卡接线图_运动控制卡说明书
- 图片尺寸px怎么转换成厘米?在线图片尺寸换算工具怎么用?
- 【Github】使用github
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
- 音乐播放器 桌面小部件