题解P0006:生日蛋糕(P1731)
这道题居然是1999年省选题!这可能是洛谷蓝题里最水的了。。。
题目链接:https://www.luogu.com.cn/problem/P1731 大家有兴趣可以去看看
题目描述:就是类似这样一个蛋糕:

现在给它体积和层数,为了省奶油,要求它最小表面积(不算底面)
题目思路:深搜剪枝,从下到上枚举每层的半径和高,最终求出最小表面积(具体思路和剪枝详见代码注释)
代码:
#include<bits/stdc++.h>
using namespace std;
int r[21],h[21],n,m,we=0x3f3f3f3f;//定义数组存储半径和高是为了省事
void dfs(int v,int s,int k,int p){//v:体积;s:表面积;k和p:层数(一个倒着的一个正着的)
int i,j;
//下面是剪枝,可以最后看
if(v<0){//体积超了
return;//返
}
if(k<0){//层数超了
return;//返
}
if(s+k+r[1]*r[1]>we){//表面积超了当前最小值,再往下搜没意义了
return;//返
}
if(v>r[p-1]*r[p-1]*h[p-1]*k){//假设之后的体积全=当前体积,还是不够
return;//返
}
//剪枝结束
if(k==0&&v==0){//满足条件
s+=r[1]*r[1];//加上最下面的底面积(=所有层有用的底面积)
we=min(we,s);//取最小值
return;
}
for(i=r[p-1]-1;i>=k;i--){//枚举半径(i的初始值是上一层-1)
for(j=h[p-1]-1;j>=k;j--){//枚举高
if(v>=i*i*j&&k>=0){
r[p]=i;
h[p]=j;
dfs(v-i*i*j,s+2*i*j,k-1,p+1);//v减去当前层体积,s加上侧面积
r[p]=i;//回溯
h[p]=j;
}
}
}
}
int main(){
cin>>n>>m;
h[0]=int(sqrt(n));
r[0]=int(sqrt(n));//手动确定最底层高和半径的最大值
dfs(n,0,m,1);
if(we==0x3f3f3f3f){//若值不变
cout<<0;//输出0
}else{
cout<<we;
}
return 0;
}
题解P0006:生日蛋糕(P1731)的更多相关文章
- 【题解】生日蛋糕-C++
Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层生日蛋糕,每层都是一个圆柱体.设从下往上数第i(1 <= i <= M)层蛋糕是半径为Ri, ...
- 【题解】洛谷P1731 [NOI1999] 生日蛋糕(搜索+剪枝)
洛谷P1731:https://www.luogu.org/problemnew/show/P1731 思路 三重剪枝 当前表面积+下一层表面积如果超过最优值就退出 当前体积+下一层体积如果超过总体积 ...
- 题解 P1731 【生日蛋糕】
题面传送门 如果不懂DFS,请自觉睡觉: 如果不懂剪枝,请自觉睡觉: 啊哈,大家的思路一定和我一样--DFS,找个数组存储半径和高,可是如单单使用DFS不加剪枝的话,10分--20分. 所以,我们来想 ...
- 洛谷 P1731 [NOI1999]生日蛋糕 题解
每日一题 day53 打卡 Analysis 观察一个蛋糕的俯视图,上表面的面积其实就是最下面那一层的底面积,所以在第一次搜索的时候加入这个底面积,之后就只用考虑侧面积就好啦. 就是每次枚举r和h,如 ...
- Codevs 1710 == POJ 1190 生日蛋糕 == 洛谷P1731
生日蛋糕 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ ...
- 洛谷 P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M ...
- 洛谷——P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 搜索+剪枝 常见的剪枝: 若当前状态+后面所要搜索的最差的状态$>$或是$<$最后的状态,就返回 预处理最差的状态 #include<iost ...
- 洛谷P1731生日蛋糕(dfs+剪枝)
P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...
- C++ 洛谷 P1731 [NOI1999]生日蛋糕
P1731 [NOI1999]生日蛋糕 一本通上也有. 这TM是一道极其简单的深搜剪枝(DP当然可以的了,这里我只讲深搜). 首先圆柱公式:(有点数学基础都知道) V=πR2H S侧=π2RH S底= ...
随机推荐
- Solution -「USACO 2020.12 P」Sleeping Cows
\(\mathcal{Description}\) Link. 有 \(n\) 个牛棚,大小为 \(t_{1..n}\),\(n\) 头奶牛,大小为 \(s_{1..n}\),奶牛只能住进不小 ...
- MySQL windows下cmd安装操作
sh1.下载安装包,解压到指定目录 网址:https://dev.mysql.com/downloads/mysql/ 2.添加环境变量 右键点击计算机-属性-高级系统设置-环境变量: 将mysql ...
- windbg调试系列教程:sos扩展的介绍和使用
SOS是什么? 直观来说,sos就是一个程序集文件.这个程序集的作用就是让我们在使用windbg分析.net进程时,更加方便快捷.通过sos,我们可以清晰的查看CLR运行时的各类信息,辅助我们去理解托 ...
- spring IOC的理解,原理与底层实现?
从总体到局部 总 控制反转:理论思想,原来的对象是由使用者来进行控制,有了spring之后,可以把整个对象交给spring来帮我们进行管理 DI(依赖注入):把对应的属性 ...
- intellij IDEA 安装、简单使用与创建javaWeb项目
这里我用mac for intellij IDEA 进行演示 1.安装 安装的话不多说 与我之前发的webstorm一样 这里提供下intellij IDEA的破解站http://xidea.onl ...
- operator的解释
operator是C++的关键字,它和运算符一起使用,表示一个运算符函数,理解时应将operator=整体上视为一个函数名. 这是C++扩展运算符功能的方法,虽然样子古怪,但也可以理解:一方面要使运算 ...
- web渗透绕过
////目录: 403 IP地址绕过与文件名绕过 登录框绕过 SQL注入绕过 文件上传绕过 RCE绕过 403 IP地址绕过与文件名绕过 X-Forwarded-For:127.0.0.1 X-For ...
- Smartbi报表工具的学习笔记,如何学好报表分析?
近期,因为工作需要,学习了一个报表工具Smartbi,这是国产BI软件,其功能还是挺强大的,并且学习成本很低,容易上手. 其实在学习Smartbi之前,我还学习了一段时间的微软BI工具sqlserve ...
- springMVC整合mybatis,spring
使用spring-mvc创建一个项目的过程 spring的配置十分复杂,很难记忆. 这篇博客用于记录springmvc整合创建过程,虽然步骤有点多,但是每一步都很容易理解,便于以后忘记后参考和记忆. ...
- 用图帮你了解https的原理
Http存在的问题 上过网的朋友都知道,网络是非常不安全的.尤其是公共场所很多免费的wifi,或许只是攻击者的一个诱饵.还有大家平时喜欢用的万能钥匙,等等.那我们平时上网可能会存在哪些风险呢? 泄密, ...