【dfs】p1731 生日蛋糕
1441:【例题2】生日蛋搞
【题目描述】
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外,以上所有数据皆为正整数)
【输入】
有两行,第一行为N(N≤10000),表示待制作的蛋糕的体积为Nπ;第二行为M(M≤20),表示蛋糕的层数为M。
【输出】
仅一行,是一个正整数S(若无解则S=0)。
【输入样例】
- 100
- 2
【输出样例】
- 68
【提示】
附:圆柱公式
体积V=πR2HV=πR2H
侧面积A=2πRHA=2πRH
底面积A=πR2
思路:
dfs很简单但是如果直接用dfs暴力的话会TLE!
那么该怎么剪枝呢?
1 要是剩下体积除以最大(虽然取不到)半径所得到的表面积+累计表面积大于答案你还搜个屁!
2 要是剩下来的体积已经小于该层最小体积了你还搜个屁!
3 还有为了剪枝,我们要起先预处理某一层的最大不可的表面积和体积你还搜个屁!
4 要是最小面积+当前累计表面积已经比已知答案大了你还搜个屁!
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cmath>
- #include<queue>
- #include<stack>
- #include<vector>
- #include<map>
- #include<string>
- #include<cstring>
- using namespace std;
- ;
- ;
- ],b[];
- inline int read() {
- char c = getchar();
- , f = ;
- ') {
- ;
- c = getchar();
- }
- + c - ', c = getchar();
- return x * f;
- }
- /*
- 体积V=πR2H
- 侧面积A=2πRH
- 底面积A=πR2
- */
- void dfs(int v/*已用体积*/,int s/*表面积*/,int p/*剩余层数 注意是剩余*/,int r/*半径*/,int h/*搞*/) {
- ) { //如果已经搜没有剩余的层数了那还搜个屁!
- if (v==n&&s<ans)
- ans=s;
- return ;
- }
- /*剪枝大法好*/
- ]>n)
- return ;//如果已用体积加上这层的最大体积大于了n那还搜个屁!
- ]>ans) //.............那还搜个屁!
- return ;
- *(n-v)/r+s>=ans)
- return; //当前的表面积+余下的侧面积>当前最优值那还搜个屁!
- /*剪枝大法好*/
- ; i>=p; i--) { //半径
- if(p==m)
- s=i*i;
- ])/(i*i),h-);
- for(int j=pyyyyyy; j>=p; j--) //高
- dfs(v+i*i*j,s+*i*j,p-,i,j);
- }
- }
- int main() {
- n=read();
- m=read();
- cin>>n>>m;
- ans=maxn;
- a[]=;
- b[]=;
- ; i<; i++) {
- a[i]=a[i-]+*i*i;//i层的最大表面积
- b[i]=b[i-]+i*i*i;//i层的最大体积 体积V=πR2H
- }
- dfs(,,m,n+,n+);//进行搜索
- //5个量的意思看上面
- if(ans==maxn)
- cout<<;
- else
- cout<<ans;
- ;
- }
【dfs】p1731 生日蛋糕的更多相关文章
- 洛谷P1731生日蛋糕(dfs+剪枝)
P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...
- 洛谷 P1731 生日蛋糕
/*洛谷 1731 生日蛋糕 傻傻的-1 T成了傻逼*/ #include<cstdio> #include<iostream> #include<cmath> # ...
- 洛谷P1731 生日蛋糕
李煜东太神了啊啊啊啊啊! 生日蛋糕,著名搜索神题(还有虫食算). 当年的我30分.... 这哥们的程序0ms... 还有他的树网的核也巨TM神. 疯狂剪枝! DFS(int d, int s, int ...
- P1731 生日蛋糕
题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为Ri, 高度为Hi的圆柱 ...
- [洛谷P1731][NOI1999]生日蛋糕(dfs)(剪枝)
典型的深搜+剪枝策略 我们采用可行性剪枝.上下界剪枝.优化搜索顺序剪枝.最优性剪枝的方面来帮助我们进行剪枝. 也许有人还不知道剪枝,那我就弱弱地为大家补习一下吧qwq: .优化搜索顺序: 在一些搜索问 ...
- 洛谷 P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M ...
- 洛谷——P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 搜索+剪枝 常见的剪枝: 若当前状态+后面所要搜索的最差的状态$>$或是$<$最后的状态,就返回 预处理最差的状态 #include<iost ...
- C++ 洛谷 P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 一本通上也有. 这TM是一道极其简单的深搜剪枝(DP当然可以的了,这里我只讲深搜). 首先圆柱公式:(有点数学基础都知道) V=πR2H S侧=π2RH S底= ...
- POJ1190生日蛋糕[DFS 剪枝]
生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18236 Accepted: 6497 Description ...
随机推荐
- rbac组件权限按钮,菜单,可拔插
1.通用模板 overflow: auto; //在a和b模板中进行切换 a 模板 :左侧菜单跟随滚动条 b模板 左侧以及上不动 **** <!DOCTYPE html> <h ...
- 【学习总结】Git学习-参考廖雪峰老师教程八-使用GitHub
学习总结之Git学习-总 目录: 一.Git简介 二.安装Git 三.创建版本库 四.时光机穿梭 五.远程仓库 六.分支管理 七.标签管理 八.使用GitHub 九.使用码云 十.自定义Git 期末总 ...
- java中的定时任务小示例
package package_1; import java.text.SimpleDateFormat; import java.util.Date; import java.util.Timer; ...
- composer 自动加载类 通过psr
项目地址 git@github.com:brady-wang/composer.git "autoload":{ "classmap":[ "Lib ...
- 【转】使用 lsof 查找打开的文件
在 UNIX® 环境中,文件无处不在,这便产生了一句格言:“任何事物都是文件”.通过文件不仅仅可以访问常规数据,通常还可以访问网络连接和硬件.在有些情况下,当您使用 ls 请求目录清单时,将出现相 ...
- github上测试服出现bug,如何回滚并获得合并之前的分支
使用场景: 当我们提交了一个pr,但是该pr合并之后,经过在测试测试有问题,需要回滚.这个时候主master代码将会被回滚到提交你的pr之前的代码.而你的pr由于已经被合并过了,所以无法继续提交. 这 ...
- Data Structures & js &ES 6 & ES next
Data Structures & js &ES 6 & ES next Algorithm Singly-Linked List & Doubly-Linked Li ...
- SVN连接不上,Host地址问题
链接https://svn.ct-ec:8888/svn/189cn-document C:\Windows\System32\drivers\etc 单独换成单行,就好了.
- C# Web开发中弹出对话框的函数[转载]
public void Alert(string str_Message) { ClientScriptManager scriptManager =((Page)System.Web.HttpCon ...
- 在 Web 页面中使用离线地图
1. 所需工具&插件: 1. MapDownloader (提取码: spx6) 2. GISMysqlToLocalFile (提取码: vus6) 3. Leaflet 2. 操作: 1. ...