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
2H

侧面积A' = 2πRH

底面积A = πR
2
 
思路:正常深搜,但是会TLE,需要众多剪枝
①我们可以预处理1~当前层所需的最小表面积和体积,然后如果已经选的表面积(体积)+ 剩下最小表面积(体积)超过ans(N规定体积)就return
②枚举r,h时,我们可以知道规定枚举范围,就不需要每次减一递减
maxR = min(r,sqrt(N-SumV-minV[now-1])
maxH = min(h,(n-SumV-minV[now-1])/(i*i))
③最难的一个剪枝:
n-SumV = Σh【k】*r【k】*r【k】   (1<=k<=now)               
2*Σr【k】*h【k】= 2/r【now+1】*Σr【k】*h【k】*r【now+1】 >=  2/r【now+1】*Σh【k】*r【k】*r【k】(1<=k<=now)
2*Σr【k】*h【k】 >= 2*(n-SumV)/r【now+1】  (1 <= k <= n)
所以 SumS + = 2*(n-SumV)/r【now+1】 >= ans 就return
因为当前dfs的r,h是本次选择的时候的边界,所以加个last变量记录r【now+1】即上次选择的半径r
 
#include<cstdio>
#include<cstdio>
#include<algorithm>
#include<math.h>
using namespace std; int n,m,ans;
int minV[];
int minS[];
void dfs(int now,int SumS,int SumV,int r,int h,int last)
{
if(SumS + minS[now] > ans)
return;
if(SumV + minV[now] > n)
return;
if(SumS + *(n-SumV)/last >= ans)
return;
if(!now)
{
if(SumV == n && SumS < ans)
ans = SumS;
return;
}
int maxR = min(r,(int)sqrt(n-SumV-minV[now-]));
for(int i=maxR;i>=now;i--)
{
if(now == m)SumS = i*i;
int maxH = min((n-minV[now-]-SumV)/(i*i), h);
for(int j=maxH;j>=now;j--)
{
dfs(now-,SumS+*i*j,SumV+i*i*j,i-,j-,r);
}
}
} int main()
{
ans = 0x3f3f3f3f;
for(int i=; i<=; i++)
{
minV[i] += minV[i-] + i*i*i;
minS[i] += minS[i-] + *i*i;
}
scanf("%d%d",&n,&m);
dfs(m,,,,,);
if(ans == 0x3f3f3f3f)ans = ;
printf("%d\n",ans);
}
 
 
 

生日蛋糕 POJ - 1190 (搜索+剪枝)的更多相关文章

  1. 生日蛋糕 POJ - 1190 搜索 数学

    http://poj.org/problem?id=1190 题解:四个剪枝. #define _CRT_SECURE_NO_WARNINGS #include<cstring> #inc ...

  2. 洛谷 P1731 [NOI1999]生日蛋糕 && POJ 1190 生日蛋糕

    题目传送门(洛谷)  OR 题目传送门(POJ) 解题思路: 一道搜索题,暴力思路比较容易想出来,但是这道题不剪枝肯定会TLE.所以这道题难点在于如何剪枝. 1.如果当前状态答案已经比我们以前某个状态 ...

  3. poj 2531 搜索剪枝

    Network Saboteur Time Limit: 2000 MS Memory Limit: 65536 KB 64-bit integer IO format: %I64d , %I64u ...

  4. 生日蛋糕 POJ - 1190

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

  5. POJ 1190 生日蛋糕 【DFS + 极限剪枝】

    题目传送门:http://poj.org/problem?id=1190 参考剪枝:https://blog.csdn.net/nvfumayx/article/details/6653111 生日蛋 ...

  6. poj 1190 DFS 不等式放缩进行剪枝

    F - (例题)不等式放缩 Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submi ...

  7. 搜索+剪枝——POJ 1011 Sticks

    搜索+剪枝--POJ 1011 Sticks 博客分类: 算法 非常经典的搜索题目,第一次做还是暑假集训的时候,前天又把它翻了出来 本来是想找点手感的,不想在原先思路的基础上,竟把它做出来了而且还是0 ...

  8. 【迭代博弈+搜索+剪枝】poj-1568--Find the Winning Move

    poj  1568:Find the Winning Move   [迭代博弈+搜索+剪枝] 题面省略... Input The input contains one or more test cas ...

  9. NOIP2015 斗地主(搜索+剪枝)

    4325: NOIP2015 斗地主 Time Limit: 30 Sec  Memory Limit: 1024 MBSubmit: 270  Solved: 192[Submit][Status] ...

随机推荐

  1. jenkins 安装网址

    https://wiki.jenkins.io/display/JENKINS/Installing+Jenkins

  2. PID控制器开发笔记之一:PID算法原理及基本实现

    在自动控制中,PID及其衍生出来的算法是应用最广的算法之一.各个做自动控制的厂家基本都有会实现这一经典算法.我们在做项目的过程中,也时常会遇到类似的需求,所以就想实现这一算法以适用于更多的应用场景. ...

  3. GitHub访问慢

    问题描述 一直都觉得访问 GitHub 时速度非常慢,刷新一下都要等好久!于是尝试一下能否解决掉... github.com assets-cdn.github.com avatar2.githubu ...

  4. java方法重载和重写

    1.java的方法重载和重写,表示两种不同的类型.this关键字,出现在类的构造方法中,代表使用该构造方法所创建的对象.,this可以出现在实例方法中核构造方法中.但是不能出现在类方法中.实例方法只能 ...

  5. django----常用功能

    request.path_info 获取url地址

  6. uva11827 处理下输入

    /*0.012s*/ #include<cstdio> #include<algorithm> using namespace std; ], n; int gcd(int a ...

  7. pycharm导入本地py文件时,模块下方出现红色波浪线时如何解决

    有时候导入本地模块或者py文件时,下方会出现红色的波浪线,但不影响程序的正常运行,但是在查看源函数文件时,会出现问题 问题如下:  解决方案: 1. 进入设置,找到Console下的Python Co ...

  8. python目录和文件的列表清单

    import os # 通过给定的文件夹,列举出这个文件夹当中,所有的文件,以及文件夹,子文件夹当中的所有文件def listFilesToTxt(dir,file): # 1.列举出,当前给定的文件 ...

  9. exec函数族

    进程程序替换 进程程序替换原理 fork创建子进程执行的是和父进程相同的程序(也有可能是某个分支),通常fork出的子进程是为了完成父进程所分配的任务,所以子进程通常会调用一种exec函数(六种中的任 ...

  10. 设置git记住用户和密码

     git config --global credential.helper store