poj1190 生日蛋糕 dfs神剪枝

poj_ 1190 生日蛋糕 描述 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = Sπ 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正整 阅读详情

转载自:http://blog.youkuaiyun.com/gubojun123/article/details/7804516


由于深度一定(m),所以使用深度优先搜索,自上而下的设定蛋糕序号,最顶层的为第1层,……,最底层的蛋糕为第m层,很明显满足题目条件的前i层的(从顶层(也就是编号为1的层)开始计数)最小面积mins[i]和体积minv[i]是在该层的半径以及高度都为i时取得,如果采用一般的神搜肯定会超时,所以这题还需要剪枝,剪枝条件有(从m层向上搜,假设前dep层的体积为sumv,面积为sums,当前所得的最小面积为best):
     1> 因为前dep层的体积为sumv,如果剩下的几层的体积都取最小可能值,总体积还是比n大,那么则说明前dep层的方案不可行,所以可以剪枝(剪枝条件为:sumv+minv[dep-1]>n)
     2> 因为前dep层的面积为sums,如果剩下的几层的面积都取最小可能值,所得的面积和比已经得到的所求的最小面积best大,也可以进行剪枝(剪枝条件为:sums+mins[dep-1]>best)
     3> 因为前dep层的体积为sumv,那么剩余的m-dep层的体积满足:n-sumv=(h[k]*(r[k]^2)+……+h[m]*(r[m]^2))      (k=dep+1,……,m)
            而剩余部分的表面积满足:lefts=2*(r[k]*h[k]+……+r[m]*h[m])>2*(n-sumv)/r[dep]                    (k=dep+1,……,m)
            显然有上述不等式lefts=best-sums>2*(n-sumv)/r,即2*(n-sumv)/r+sums<best,所以当2*(n-sumv)/r[i]+sums>=best时也可以进行剪枝.


#define INF 10000000  
#define min(a,b) (a<b?a:b)  
int n,m,best,minv[22],mins[22];  
void Init()  
{  
     int i;  
     minv[0]=0;  
     mins[0]=0;  
     for(i=1;i<22;i++)//从顶层向下计算出最小体积和表面积的可能值  
     {  
        //从顶层(即第1层)到第i层的最小体积minv[i]成立时第j层的半径和高度都为j  
         minv[i]=minv[i-1]+i*i*i;  
         mins[i]=mins[i-1]+2*i*i;  
     }  
}  
//dep:搜索深度,从底层m层向上搜,r,h分别为该层的半径和高度  
void DFS(int dep,int sumv,int sums,int r,int h)  
{  
     int i,j,maxh;  
     if(dep==0)//搜索完成,则更新最小面积值  
     {  
         if(sumv==n&&sums<best)  
            best=sums;  
         return;  
     }  
     //剪枝如上面所述  
     if((sumv+minv[dep-1]>n)||(sums+mins[dep-1]>best)||(2*(n-sumv)/r+sums>=best))  
         return;  
     //按递减顺序枚举dep层蛋糕半径的每一个可能值,这里第dep层的半径最小值为dep  
     for(i=r-1;i>=dep;i--)   
     {  
         if(dep==m)//底面积作为外表面积的初始值(总的上表面积,以后只需计算侧面积)  
            sums=i*i;  
         //最大高度,即dep层蛋糕高度的上限,(n-sumv-minv[dep-1])表示第dep层最大的体积  
         maxh=min((n-sumv-minv[dep-1])/(i*i),h-1);  
         for(j=maxh;j>=dep;j--)//同理,第dep层的最小高度值为dep  
            DFS(dep-1,sumv+j*i*i,sums+2*i*j,i,j);//递归搜索子状态  
     }  
}  
  
int main()  
{  
    Init();  
    while(~scanf("%d%d",&n,&m))  
    {  
          best=INF;  
          DFS(m,0,0,n+1,n+1);  
          if(best==INF)  
             best=0;  
          printf("%d\n",best);  
    }  
    return 0;  
}  


在原博主的基础上把初始化时的半径优化成sqrt(n + 1),效果更佳

剪枝总结 一、引子 剪枝,就是减小搜索树规模、尽早排除搜索树中不必要的分支的一种手段。 形象地看,就好像剪掉了搜索树的枝条,故被称为剪枝。 二、常见剪枝方法 1.优化搜索顺序 在一些问题中,搜索树的各个分支之间的顺序是不固定的 不同的搜索顺序会产生不同的搜索形态,规模也相差甚远 2.排除等效分支 在搜索过程中,如果我们能够得知搜索树的当前节点沿着 某几条不同分支到达的子树是等效的,那么只需... 阅读详情

相关推荐

poj 1190 dfs+剪枝(生日蛋糕)

题意:中文题。要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。 令Q = Sπ 请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。 (除Q外,以上所有数据皆为正整数) 思路:主要第三个剪枝比较难想:设剩余总体积

dearmango 679

POJ-1190生日蛋糕(详细题解)深度优先搜索

一、 > 如果搭建完剩余层所需的最小体积(min_v)比剩余可用体积($V-V_i,其中V_i$表示搭建底层蛋糕已经使用的体积)还要大,则说明题目所固定的体积**不够用**,此时应该减小底层固定的半径$R_i和H_i$,直到它们满足第三种情况 二、 > 如果搭建完剩余蛋糕层所需最大体积(max_v)比剩余可用体积($V-V_i$)还要小的话,则说用题目所固定的体积**用不完**,此时应该增大底层固定的半径$R_i和H_i$,直到它们满足第三种情况 > 三、 如果搭建完剩余蛋糕层所需的最小体积(min

weixin_46295292的博客 3419

POJ1190 生日蛋糕(回溯法)

cuicuiv-POJ刷题 点击此处跳转原题界面---->生日蛋糕 回溯法:是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。 ——在回溯法中,每次扩大当前部分解时,都面临一个可选的状态集合,新的部分解就通过在该集合中选择构造而成。这样的状态集合,其结构是一棵多叉树,每个树结点代表一个可能的部分解,它的儿子是在它的基础上生成的其他部分解。

Lcuicui的博客 1523

POJ Anniversary Cake (dfs,神剪)

题目链接:http://poj.org/problem?id=1020 题意: 首行是t,下面t行每行是一个case,第一个数s表示给你一个边长为s的正方形大蛋糕,第二个数n表示把这个大蛋糕分成n块小正方形蛋糕,后面跟n个数表示这n个蛋糕的边长。 问是否能刚好分完。是输出KHOOOOB! ,不是输出HUTUTU!  个人感觉这道搜索题有些难...看了别人的代码才了解了思路。 参考

Benjamin_Z的博客 919

poj 1190 生日蛋糕( 深搜+2类重要剪枝总结 )

题意 :  有一个多层蛋糕,已知蛋糕的体积和层数,求该蛋糕的最小表面积(最底层的下表面面积不计入总面积)              题目对每一层的半径和高度都有限制,下层的半径和厚度要大于上层的半径和厚度 Ri > Ri-1, Hi > Hi-1,且半径和厚度均为整数

nvfumayx的专栏 4287

深度优先搜索之生日蛋糕

描述 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π...

抬头做人低头做事 945

POJ1190生日蛋糕(DFS+神级剪枝)

http://poj.org/problem?id=1190 打表每层的最小面积和体积。 由于深度一定(m),所以使用深度优先搜索,自上而下的设定蛋糕序号,最顶层的为第1层,……,最底层的蛋糕为第m层,很明显满足题目条件的前i层的(从顶层(也就是编号为1的层)开始计数)最小面积mins[i]和体积minv[i]是在该层的半径以及高度都为i时取得,如果采用一般的神搜肯定会超时,所以这题...

190

python基础·练习1(字符串作业)

python基础·练习1字符串作业一、填空二、编程初级中级 字符串作业 一、填空 1.已知s2 = ‘123’,则:s2 * 3 = ___________; s2 + str(456) = ___________; s2 = '123' print(s2 * 3) #123123123 print(s2 + str(456)) #123456 2.已知s1 = ‘123456789’。则: s1[:3] = ________; s1[-5:] =____________; s1[::2]=______;

qq_47326711的博客 8122

poj1190 神剪枝啊 生日蛋糕 (dfs)

7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。  设从下往上数第i(1 Ri+1且Hi > Hi+1。  由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。  令Q = Sπ  请编程对给出的N和M,找出蛋糕的制作方案(适当的Ri和Hi的值),使S最小。  (除Q外,以上所有数据皆为正

AK_HuangYC的博客 326

寻迹Arduino智能小车

Arduino巡线寻迹智能小车

Rachael_Wang的博客 9976

基于CRU和WorldClim的高分辨率(1km)气候数据生成

基于CRU和WorldClim的高分辨率(1km)气候数据生成

lhq7842955的博客 1691

POJ 1190 生日蛋糕 (dfs + 神剪枝)

POJ 1190 有三处剪枝,作为渣渣表示这题对我来说很有难度。题解也是看了好久才理解。 首先,minv[i] 表示从上往下数第i层以及第i层以上的最小总体积,mins[i]表示从上往下数第i层以及第i层以上的最小总面积。仔细想想可以知道每层的半径和高度都取这一层的层数即可得到最小值。 然后具体见代码。 参考博客:http://www.cnblogs.com/rainyda

Benjamin_Z的博客 1056

体素坐标(voxel_coors)在mmdetection3d中的理解

体素坐标(voxel_coors)在mmdetection3d中的理解

weixin_38362784的博客 4217

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

生日蛋糕Time Limit:1000MSMemory Limit:10000KTotal Submissions:12277Accepted:4325Description7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,...

weixin_31775717的博客 3788

MoveIt避障规划实战:从点云到OctoMap的环境感知全流程

本文详细解析了MoveIt避障规划中从点云到OctoMap的环境感知全流程,重点介绍了深度相机选型、点云数据处理、OctoMap生成及避障规划参数调优等关键技术。通过实战案例展示了如何利用MoveIt和OctoMap实现机械臂在复杂环境中的高效避障,为工业自动化和服务机器人开发提供实用解决方案。

weixin_30417487的博客 568

手把手教你离线部署Jupyter Notebook及高效插件配置

本文详细介绍了如何在离线环境中部署Jupyter Notebook及配置高效插件,包括离线安装步骤、依赖管理、核心扩展安装及常见问题排查。特别针对金融、科研等封闭网络场景,提供完整的whls包和requirements.txt解决方案,帮助开发者和数据分析师突破网络限制,提升工作效率。

weixin_28839549的博客 583

生日蛋糕POJ 1190

POJ 生日蛋糕(Tag 深搜 + 剪枝) DFS 剪枝优化 极限思想

lvxin1204的博客 3532

道路缺陷检测实战指南:基于YOLOv11的深度学习系统从搭建到落地

道路缺陷检测项目的每一步,都是“理论→实践→反思→优化”的成长循环。当你看到自己开发的系统能精准识别出道路上的每一处裂缝、每一个坑洼时,那种“技术解决真实问题”的成就感,会让你明白深度学习不止是论文里的公式,更是改变行业的工具。如果过程中遇到模型不收敛、界面功能异常等问题,不妨把问题拆解成“数据是否标注准确?”“模型参数是否合理?”“界面逻辑是否有漏洞?”等小问题逐一排查。记住,每解决一个问题,你就离“能独立落地AI项目的工程师”更近一步。

LXY_LOVE36的博客 171

生日蛋糕POJ1190

生日蛋糕POJ1190 思路 题干在这:POJ1190 深度优先搜索,多剪剪枝 ac代码 #include<cstdio> #include<algorithm> #include<iostream> #include<cmath> #define inf 0x3f3f3f3f using namespace std; int N, M, S = i...

没有自旋的π介子 750

在jetson上对fastdeploy进行源码编译(完整版)

在大多数Linux发行版中,你可以使用包管理器安装Python开发包。根据jetpack的版本选择对应的推理库版本。在~/.bashrc中写入这三行。

如果想成为中心,那么就到中心去吧。 677

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

POJ1190:生日蛋糕(深搜+剪枝)

POJ1190:生日蛋糕 描述: 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。

WaveBridge的博客 1670

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

POJ1190 生日蛋糕 DFS剪枝——C++详解

生日蛋糕 Time Limit: 1S Memory Limit: 10000K Total Submissions: 28941 Accepted: 10342 Description 制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底

枯木何日可逢春 1039

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

poj1190生日蛋糕(dfs+剪枝)

->题目请戳这里 题目大意:一个m层的蛋糕,每层蛋糕均为圆柱体,总体积为n*PI,从下往上的层数满足每一层的半径和高度逐层严格递减。蛋糕最小表面积(不算底面)。(其中m、n以及每层的半径和高度均为整数,设最小表面积为s*PI,输出s)。如果不存在解,输出0。 题目分析:因为所有数据都是整数,层数不超过20层,每层的半径和高度有是单调递减的,因此可以用dfs遍历所有解,求最小的。用dfs逐层枚举

ophunter的专栏 1082

poj1190 生日蛋糕 dfs

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

Unknown 1092

生日蛋糕 POJ - 1190--DFS+多剪枝

DFS+多剪枝 题目链接:http://poj.org/problem?id=1190 生日蛋糕 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体。 设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, 高度为Hi的圆柱。当i < M时,要求Ri > Ri+1且Hi > Hi+1。 由于要在蛋糕上抹奶油,为...

nine 226
上一篇: codeforces624B Making a String 贪心 排序
下一篇: 蓝桥杯练习系统试题集 算法提高 ADV-147 学霸的迷宫
Daemoonn
博客等级 码龄11年 42粉丝 198原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值