c语言生日蛋糕图片,poj1190生日蛋糕

生日蛋糕

Time Limit: 1000MS

Memory Limit: 10000K

Total Submissions: 12277

Accepted: 4325

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 = πR2H

侧面积A' = 2πRH

底面积A = πR2

#include

#include

#include

#define MAXN 999999999

int f,n,mins;

int dfs(int m,int r,int h,int s,int v)

{

int i,j,k,a,b,temp;

v+=r*r*h;

if(v>n)

return 1;

s+=2*r*h;//if(v==100)printf("%d %d %d %d %d %d ",m,v,r,h,s,n);

if(s+2*(n-v)/r>=mins)//这是一个很厉害的剪枝,看解题报告的,没这个我的就超时

return 2;//2是除了返回0,1,-1三种情况之外的情况

if(m

{

a=dfs(m+1,r-1,h-1,s,v);//根据返回值来判断当前半径高度都取最大值结果v<=n,那么这种状态则可直接剪掉

if(a==-1)

return -1;//表示v比n小

else if(a==0)

return 0;//表示v等于n

a=dfs(m+1,f-m,f-m,s,v);//根据返回值来判断当前半径高度都取最小值结果v>=n,那么这种状态则可直接剪掉

if(a==1)

return 1;//表示v比n大

else if(a==0)

return 0;//表示v等于n

}

if(m==f)

{

if(v

return -1;

else if(v>n)

return 1;

if(mins>s)

{

mins=s;

}

return 0;

}

else if(v>=n)

return 1;

for(i=r-1;i>=f-m;i--)

{

temp=(n-v)/i/i;

for(j=temp=f-m;j--)

{

if((j!=h-1||i!=r-1)&&(j!=f-m||i!=f-m))//这句话是为了避免前面的已经搜索过的重复搜索

dfs(m+1,i,j,s,v);

}

}

return 2;

}

int main()

{

int i,j,k,a[30][3],s,v;

while(scanf("%d%d",&n,&f)!=EOF)

{

a[0][0]=sqrt((double)n);

mins=MAXN;

k=0;

v=0;

for(i=a[0][0];i>=f;i--)

{

s=i*i;//先把底面积给加上去

for(j=n/i/i;j>=f;j--)

{

dfs(1,i,j,s,v);

}

}

if(mins!=MAXN)

printf("%d\n",mins);

else printf("0\n");

}

return 0;

}

poj1190 生日蛋糕(深搜&plus;剪枝)

题目链接:poj1190 生日蛋糕 解题思路: 深搜,枚举:每一层可能的高度和半径 确定搜索范围:底层蛋糕的最大可能半径和最大可能高度 搜索顺序:从底层往上搭蛋糕,在同一层尝试时,半径和高度都是从大到 ...

poj1190 生日蛋糕 dfs

题意:生日蛋糕有m层,总体积是V.从下向上,每一层的半径r和高度h都是递减的. 给m.v,求最小的表面积s.(不算底面接地的面积) 题目链接:poj1190 剪枝都还没加..样例输出都是错的...还没 ...

POJ1190生日蛋糕&lbrack;DFS 剪枝&rsqb;

生日蛋糕 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18236   Accepted: 6497 Description ...

poj1190 生日蛋糕

题意: 要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱.当i < M时,要求Ri > ...

POJ-1190 生日蛋糕 NOI99

深搜+几个剪枝. 貌似搜索顺序也挺重要的...我不知是不是因为这个然后Tle了好久... #include #include #incl ...

&lbrack;POJ1190&rsqb;生日蛋糕&lt&semi;DFS&gt&semi;

题目链接:http://poj.org/problem?id=1190 题看上去确实很复杂 涉及到半径面积这些,其实看着真的很头疼 但是除去这些就是剪枝优化的dfs算法 #include

生日蛋糕 &lpar;poj1190&rpar; &lpar;dfs剪枝&rpar;

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

POJ1190 洛谷P1731 NOI1999 生日蛋糕

生日蛋糕(蛋糕是谁?) Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 20272   Accepted: 7219 Desc ...

poj1190深搜 生日蛋糕

题意:      让你制作一个蛋糕,这个蛋糕有m层,而且每层都是圆柱形,并且每一层都必须满足 ri>ri+1 && hi > hi+1,然后给出蛋糕的总体积是n*PI,还有 ...

随机推荐

int 和 string 相互转换(简洁版)

string int2str(int x) { return x ? num2str(x/10)+string(1,x%10+'0') : "";} int str2int(str ...

iOS——CALayer的shadow无效问题

CALayer *sublayer = [CALayer layer]; sublayer.backgroundColor = [UIColor purpleColor].CGColor; subla ...

cordova开发问题汇总

cordova开发问题汇总 1. 导入工程的"The import android cannot be resolved"错误解决方法 2. MainActivity] Unabl ...

使用C语言将IE收藏夹生成HTML

IE收藏夹里收藏的链接很多,查找也不方便,使用C编写一个小工具,可以将收藏夹里的链接文件生成到一个HTML文件上. 源码还有许多地方需要优化,后续我会优化,先分享出来.目的主要是为了练习C语言,这个代 ...

CS中调用微软自带com组件实现音频视频播放&lpar;wf&sol;wpf&rpar;

1.mp3播放器:工具箱中右键,在弹出的菜单中选择“选择项”,添加“com组件”,选择名称“windows Media Player",点击确定就会在工具箱新增一个“windows Medi ...

利用图层的mask属性裁剪图形

需求如上图. 代码如下 //充值 UIButton *rechargeButton = [[UIButton alloc] initWithFrame:CGRectMake(, , , )]; [re ...

&lbrack;SinGuLaRiTy&rsqb; 数论基础

[SinGuLaRiTy-1004] Copyright (c) SinGuLaRiTy 2017 . All Rights Reserved. 整除: 设a,b为整数,且a不为0,如果存在一个整数q ...

03&lowbar;Ext&lowbar;Viewport&lowbar;Window&lowbar;Dialog

Viewport Viewport 代表整个浏览器窗口,直接渲染到document.body节点,取代页面中的所有内容.一般作为应用程序主界面. 随着浏览器显示区域的大小自动改变,一个页面中只能有一个 ...

jpa 分页

public Page testPager(){ Pageable pageable = new PageRequest(1, 10, Sort.Direction. ...

method&period;invoke&lpar;&rpar;s

在框架中经常会会用到method.invoke()方法,用来执行某个的对象的目标方法.以前写代码用到反射时,总是获取先获取Method,然后传入对应的Class实例对象执行方法.然而前段时间研究inv ...

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值