生日蛋糕—dfs
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
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
const int N=;
const int inf=0x3f3f3f3f;
int mins[N],minv[N];
int ans,n,m;
void init()
{
int i;
mins[]=;
minv[]=;
for(i=;i<N;i++)//从顶层向下计算出最小的面积和体积值,都提出pi处理
{
mins[i]=mins[i-]+*i*i;
minv[i]=minv[i-]+i*i*i;
}
}
从m层向上搜索,dep是当前层数,sums,sumv指搜索到现在的面积和体积的值,r,h指当前层的半径和高度
void dfs(int dep,int sums,int sumv,int r,int h)
{
int maxh,i,j;
if(dep==)//搜索完成了,dep==0;
{
if(sumv==n&&sums<ans)//此时sumv==n,若面积比当前ans小的话,更新ans;
{
ans=sums;
}
return ;
}
if(sums+mins[dep-]>ans||sumv+minv[dep-]>n||*(n-sumv)/r+sums>=ans) return ;
//三个重要的剪枝,当前面积加上上面几层最小的可能面积大于ans;同理,体积;ans-sums>2*(n-sumv)/r;
for(i=r-;i>=dep;i--)
{
if(dep==m)//如果是最底下的那层,先加上他的上面的面积,这样以后就只要考虑侧面的面积就可以了
{
sums=i*i;
}
maxh=min(h-,(n-sumv-minv[dep-])/(i*i));//去最小值做最大高度h=v/(r*r)
for(j=maxh;j>=dep;j--)
{
dfs(dep-,sums+*i*j,sumv+i*i*j,i,j);//到上一层搜索
}
}
} int main()
{
init();
while(~scanf("%d%d",&n,&m))
{
ans=inf;
dfs(m,,,n+,n+);
if(ans==inf) ans=;
printf("%d\n",ans);
}
return ;
}
生日蛋糕—dfs的更多相关文章
- POJ1190生日蛋糕[DFS 剪枝]
生日蛋糕 Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 18236 Accepted: 6497 Description ...
- poj1190 生日蛋糕 dfs
题意:生日蛋糕有m层,总体积是V.从下向上,每一层的半径r和高度h都是递减的. 给m.v,求最小的表面积s.(不算底面接地的面积) 题目链接:poj1190 剪枝都还没加..样例输出都是错的...还没 ...
- 生日蛋糕(DFS)
题意: Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕 ...
- [洛谷P1731][NOI1999]生日蛋糕(dfs)(剪枝)
典型的深搜+剪枝策略 我们采用可行性剪枝.上下界剪枝.优化搜索顺序剪枝.最优性剪枝的方面来帮助我们进行剪枝. 也许有人还不知道剪枝,那我就弱弱地为大家补习一下吧qwq: .优化搜索顺序: 在一些搜索问 ...
- 洛谷P1731生日蛋糕(dfs+剪枝)
P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...
- POJ - 1190 生日蛋糕 dfs+剪枝
思路:说一下最重要的剪枝,如果当前已经使用了v的体积,为了让剩下的表面积最小,最好的办法就是让R尽量大,因为V = πR 2H,A' = 2πRH,A' = V / R * 2 ,最大的R一定是取当前 ...
- [POJ1190]生日蛋糕<DFS>
题目链接:http://poj.org/problem?id=1190 题看上去确实很复杂 涉及到半径面积这些,其实看着真的很头疼 但是除去这些就是剪枝优化的dfs算法 #include<cst ...
- POJ 1190 生日蛋糕(DFS)
生日蛋糕 Time Limit: 1000MSMemory Limit: 10000KB64bit IO Format: %I64d & %I64u Submit Status Descrip ...
- 【dfs】p1731 生日蛋糕
1441:[例题2]生日蛋搞 [题目描述] 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1≤i≤M)层蛋糕是半径为Ri, 高 ...
随机推荐
- HDU Coprime
Coprime Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total S ...
- 基于cmake编译安装MySQL-5.5
cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以 ...
- abort终止正在进行中的的ajax请求
核心:调用XMLHttpRequest对象上的abort方法 jQuery的ajax方法有自己的超时时间设置参数: $.ajax({type:'POST', url:'b.php', data:' ...
- Happy Number - LeetCode
examination questions Write an algorithm to determine if a number is "happy". A happy numb ...
- JQ写简单的伸缩菜单(内附效果图和源代码)
效果如图: JQ代码就那么几句, <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "h ...
- [资源] Open source packages on SLAM
OpenSLAM http://openslam.org/ Most main stream open source slam resource can be found on OpenSLAM, w ...
- 浅谈Eclipse的更新、升级和MyEclipse插件的安装方法
用的是如下图所示的eclipse标准版演示: 先谈下eclipse下安装MyEclipse插件的过程: 第一种方法:通过MyEclipse的存档进行离线更新 1,到MyEclipse官网进入下载页面, ...
- 软件测试--测试Demo
视频地址(第二课时):https://pan.baidu.com/s/1gfLVC2n 软件安装好了! 软件默认的浏览器是火狐. 如果需要IE,chrome,都在前一篇的安装包里有. 测试结果 视频里 ...
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- java 滤镜实现
一句话,滤镜的实现就是对像素点(RGBA)进行再运算,输出新的像素点. F(r,g,b,a)=G(r,g,b,a); 这个公式包含四个变换,即RGB颜色空间中RGB三个分量的变换以及透明度Alh ...