-->生日蛋糕 

Descriptions:

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 2
侧面积A' = 2πRH 
底面积A = πR 2 
 
深搜很容易想到  但是烦人的是剪枝 要剪好多 具体去除重复剪枝还有这些要注意
  如果剩余的最上面几层的最小体积>剩余需要的体积,那么直接退出
  如果剩余的最上面几层的最小面积+当前面积>=已经求出的最小面积,那么直接退出
 
AC代码:
#include <iostream>
#include <cstdio>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <cstring>
#include <map>
#include <stack>
#include <set>
#include <sstream>
#define mod 1000000007
#define eps 1e-6
#define ll long long
#define INF 0x3f3f3f3f
#define MEM(x,y) memset(x,y,sizeof(x))
#define Maxn 25
using namespace std;
int V,M;
int minArea;
int area;
int minv[Maxn],minarea[Maxn];
void init()
{
minv[]=;
minarea[]=;
for(int i=; i<Maxn; i++)
{
minv[i]=minv[i-]+i*i*i;
minarea[i]=minarea[i-]+*i*i;
}
}
//剩余层数也是第m层、当前所有体积、当前所有面积,当前这层蛋糕的半径,当前这层蛋糕的高
void dfs(int m,int v,int area,int r,int h)
{
if(m==)//搜索完成,则更新最小面积值
{
if(v==V&&area<minArea)
minArea=area;
return;
}
//剪枝
if(minv[m-]>V-v||*(V-v)/r+area>=minArea)
return;
//按递减顺序枚举m层蛋糕半径的每一个可能值
for(int i=r-; i>=m; i--)
{
if(m==M)//底面积作为外表面积的初始值
area=i*i;
//最大高度,即m层蛋糕高度的上限
int maxh=min(h-,V-area-minarea[m-]/(i*i));
for(int j=maxh; j>=m; j--)
{
dfs(m-,v+i*i*j,area+*i*j,i,j);
}
}
}
int main()
{
init();
minArea=INF;
cin>>V>>M;//面积,层数
dfs(M,,,V+,V+);
if(minArea==INF)
cout<<<<endl;
else
cout<<minArea<<endl;
}

最新文章

  1. (转)CMOS Sensor的调试经验分享
  2. iOS开发网络篇—大文件的多线程断点下载
  3. ASP.NET MVC简单编程之(二)经典路由篇
  4. MySQL 字段常用操作 添加,修改,删除,调整字段顺序
  5. Android MediaPlayer Error/Info Code
  6. TProcedure,TMethod,TNotifyEvent,TWndMethod的区别,并模拟点击按钮后发生的动作
  7. windows server2012域服务器降级的方法
  8. Pythonic到底是什么玩意儿?
  9. C和指针---读书笔记。
  10. FormView控件下DropDownList是否可以绑定
  11. 1024 Python 要诀
  12. React.js 开发参见问题 Q&amp;A
  13. as无法在vivo上安装程序解决
  14. linux搭建C开发环境
  15. Elasticsearch - 理解字段分析过程(_analyze与_explain)
  16. 持续集成(1)gitlab的安装
  17. 第三百三十三节,web爬虫讲解2—Scrapy框架爬虫—Scrapy模拟浏览器登录—获取Scrapy框架Cookies
  18. c# 阿拉伯数字转成中文
  19. Linux——shell简单学习(一)
  20. Linux操作系统Vim代码Tab自动补全配置

热门文章

  1. FC红白机游戏列表(维基百科)
  2. SQLDirect 6.5 Source (Delphi 5-10.1 Berlin)
  3. Delphi的Anymouse方法探秘
  4. Qt在各平台上的搭建qt-everywhere(Qt for windows7-64bit, Ubuntu 12.04-32bit, 嵌入式x86平台, 嵌入式arm平台)
  5. qt中如何用qDebug输出彩色调试信息
  6. DIY Delphi 半透明窗体(2)
  7. Delphi&amp;C#代码模拟“显示桌面”的功能(使用CreateOleObject(&#39;Shell.Application&#39;))
  8. spring boot 2.x 系列 —— spring boot 整合 druid+mybatis
  9. ASP.NET Core on K8S学习初探(2)K8S基本概念快速一览
  10. mysql-8.0.16-winx64/Linux修改root用户密码