生日蛋糕

 

生日蛋糕

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 20000/10000K (Java/Other)
Total Submission(s) : 11   Accepted Submission(s) : 8
Problem 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
 

 

Source
PKU
 
  题目的意思:有一个体积为Nπ的M层蛋糕,底下每一层的高度和半径至少比上一层的大1,也是是说明,最底下一次的半径和高度至少为M了。求解符合题意
,又要求其表面积要最小的蛋糕,求出其表面积最小值为多少。依次递归用DPS去寻找符合体积大小的数据,求解找到的最小值便是答案
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <math.h>
 4 int n,m,Min=200000000; /*Min表为面积最小的值,初始化为一个极大值*/
 5 void DFS(int d,int V,int S,int R,int H)/*前d层蛋糕体积为V 表面积为S 第d层半径R 高度H*/
 6 {
 7     int i,j;
 8     if(d==m)        /**/
 9      {
10         if(V==n)Min=S;
11         return ;
12      }
13     if(V+(R-1)*(R-1)*(H-1)*(m-d)<n)/*如果当前体积加上每层的最大值还比题*/
14         return;                  /*目要求的体积小,直接结束该趟递归*/
15     if(V+m-d>n)            /*如果当前体积加上每层的最小值还比题*/
16         return;                  /*目要求的体积大,直接结束该趟递归*/
17     if(2*(n-V)/R+S>=Min)  /*如果求解过程半途找到比当前最小值还大的数据*/
18         return ;                /*同样直接结束该趟递归*/
19     for(i=R-1;i>=m-d;i--)       /*i(半径)的最小值要保证大于当前这一层半径的最小值*/
20     {
21         for(j=H-1;j>=m-d;j--)    /*j(高度)的最小值要保证大于当前这一层高度的最小值*/
22         {
23             if((i*i*j+V<=n)&&(S+2*i*j<Min))
24                 DFS(d+1,V+i*i*j,S+2*i*j,i,j);
25         }
26     }
27 
28 }
29 int main()
30 {
31      int i,j;
32      scanf("%d%d",&n,&m);
33      for(i=m;i*i*m<=n;i++)
34      {
35         for(j=m;i*i*j<=n;j++)
36         {
37             if(i*i+2*i*j<Min)/*如果小于最小值的话,才传入*/
38             DFS(1,i*i*j,i*i+2*i*j,i,j);
39         }
40     }
41     printf("%d\n",Min);  /*输出最小值*/
42     return 0;
43 }
44 
45 /*
46 体积V=πRRH
47 侧面积A’=2πRH
48 底面积A=πRR
49 */
View Code

 

posted @ 2014-08-03 16:25  Wurq  阅读(362)  评论(2)    收藏  举报