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 = πR 2H
侧面积A’ = 2πRH
底面积A = πR 2

这题应该用dfs做,但是纯暴力肯定过不了,优化一下。1:搜索顺序,老样子从大蛋糕往下枚举,因为他的子节点少,同时先枚举大的半径,再枚举大的高度,因为半径是平方级别,可以让体积更大,2:下面每一层的蛋糕的半径和高度肯定要严格小于上一次的半径和高度,同时应该小于总体积减上面的体积开根号,因为最大的时候也只有高度为1的时候,高度要小于(n-v)/r/r 每层的半径和高度要大于等于u 3:可以预处理一下当前层的最小估价minv和mins,如果s+mins大于等于答案那么就没必要继续下去了(最优性剪枝),如果v+minv大于体积也没必要了4:4是最难推的,(鬼畜剪枝),推导如下

#include<bits/stdc++.h>
using   namespace std;
const   int N=25;
int H[N],R[N];
int minv[N],mins[N];
int n,m;
int ans=1e9;
void dfs(int u,int v,int s)
{if(minv[u]+v>n) return ;if(mins[u]+s>=ans)  return;if(2*(n-v)/R[u+1]+s>=ans)   return ;if(!u){if(n==v)ans=s;return;}for(int r=min(R[u+1]-1,(int)sqrt(n-v));r>=u;r--)for(int h=min(H[u+1]-1,(n-v)/r/r);h>=u;h--){int t=0;if(u==m)t=r*r;H[u]=h,R[u]=r;dfs(u-1,v+r*r*h,s+t+2*r*h);}}
int main()
{cin>>n>>m;for(int i=1;i<=m;i++){minv[i]=minv[i-1]+i*i*i;mins[i]=mins[i-1]+2*i*i;}R[m+1]=1e9,H[m+1]=1e9;dfs(m,0,0);cout<<ans<<endl;return 0;
}

生日蛋糕 dfs剪枝优化相关推荐

  1. DFS剪枝优化 小猫爬山 数独

    DFS剪枝策略总结 优化搜索顺序 优先搜索分支数少(剩余选择少)的情况 排除等效冗余 若对顺序没有要求 可以将排列转化为组合 可行性剪枝 不合法的情况不进行搜索 最优化剪枝 若当前的"消耗& ...

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

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

  3. szucodeforce训练1081C组合数学lucas定理,div2 627的D dfs +剪枝优化,697D Puzzles{dfs序+概率}

    给你n个方格排成一行,有m种颜色,然后要把这n个方格分成k+1段,每段涂不同的颜色,问有多少种方法. 组合数学Lucas定理 排列组合问题,首先要在n-1个位置里面选出k个位置当作段与段的分割点,然后 ...

  4. 【AcWing 165】 小猫爬山 简单dfs + 剪枝优化

    翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_<). 翰翰和达达只好花钱让它们坐索道下山. 索道上的缆 ...

  5. 深度优先搜索(DFS) 总结(算法+剪枝+优化总结)

    深度优先搜索(DFS) 总结(算法+剪枝+优化总结) 本文中会引用部分实例.文献资料来自不同的作者之手,由于资料整理比较困难,转载地址不在文中列举.如有侵权请联系我更换或删除!对于提供题解思路的各位大 ...

  6. DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山

    DFS(剪枝与优化) - 洛谷 P1361 - 小猫爬山 翰翰和达达饲养了N只小猫,这天,小猫们要去爬山. 经历了千辛万苦,小猫们终于爬上了山顶,但是疲倦的它们再也不想徒步走下山了(呜咕>_&l ...

  7. 算法第十期——DFS(深度优先搜索)的剪枝优化

    目录 DFS:剪枝 DFS:有哪些剪枝方法 DFS例题一:剪格子 [思路] DFS例题二:路径之谜 [样例分析] DFS例题三:四阶幻方 [思路] [做法一] [做法二] DFS例题三:分考场 [样例 ...

  8. POJ2688状态压缩(可以+DFS剪枝)

    题意:       给你一个n*m的格子,然后给你一个起点,让你遍历所有的垃圾,就是终点不唯一,问你最小路径是多少? 思路:       水题,方法比较多,最省事的就是直接就一个BFS状态压缩暴搜就行 ...

  9. 2020 ICPC 南京 H Harmonious Rectangle (DFS剪枝+思维)

    题目链接H-Harmonious Rectangle_第 45 届国际大学生程序设计竞赛(ICPC)亚洲区域赛(南京) 题目描述 A vertex-colored rectangle is a rec ...

最新文章

  1. html提交表单到Servlet
  2. folders默认配置 shell_分布式存储Ceph RBD-Mirror灾备方案(二)镜像模式配置
  3. 后退到的页面为什么没有执行js_为什么中层没有执行力?
  4. java工程引用其他工程,Android工程:引用另一个Android工程的方法详解
  5. PHP防SQL注入攻击
  6. iOS开发中view controller设置问题
  7. 完美实现Android ListView中的TextView的跑马灯效果
  8. linux搭建raid5命令,Linux下用mdadm命令创建软RAID5
  9. UCOS操作系统——信号量实验(十)
  10. 计算机系军训口号四句霸气,军训口号四句霸气中队
  11. Moo Slidebox
  12. php workman消息提醒,原生workman实现消息推送
  13. OpenStack虚拟机rebuild和evacuate差异梳理
  14. 线上订餐系统初步python
  15. FreeRTOS学习笔记 2 - 任务
  16. 89c52流水灯c语言程序,【学习之路】STC89C52RC流水灯程序
  17. arcsinx,arctanx反函数求导
  18. c# - FileStream、StreamReader、StreamWriter
  19. Ubuntu操作-10 电池优化
  20. 微信小程序的页面导航

热门文章

  1. Licode入门学习:MediaStream源码分析(二)
  2. 无需编程即可将chatgpt接入自己的微信公众号
  3. Ubuntu 使用yah3c 配置(全,解决no such file no device )
  4. ArcGIS(学习总结)(土地利用收集)
  5. 李彦宏、马化腾、雷军,程序员国服三强中谁的编程能力更胜一筹?
  6. 计算机学院艺术节主题标语,社团文化节主题口号和标语(精选50句)
  7. 解决专利支付错误问题
  8. tp5 php array_merge合并函数array_column(id值不见)处理办法(创建合成合拼数组)(foreach 记录集)
  9. java 西部数码_西部数码Java虚拟主机功能升级
  10. Web3在未来会让开源更好吗?