题解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底= ...
随机推荐
- windows设备相关位图与设备无关位图
windows支持两种位图格式,DDB(device-dependent bitmap),DIB(device-independent bitmap).设备相关位图用于windows显示系统中,其图像 ...
- Solution -「洛谷 P4194」矩阵
\(\mathcal{Description}\) Link. 给定一个 \(n\times m\) 的矩阵 \(A\),构造一个 \(n\times m\) 的矩阵 \(B\),s.t. \ ...
- java Excel 简单工具
我就简单的分享一下我常用的工具 这次由于个人问题工具注释全部乱码差点无法还原,也是为了防止数据丢失后期找不到再次保留方法把. 调用工具个别方法 <dependency> <group ...
- Docker配置Pytorch深度学习环境
拉取镜像 $ docker pull pytorch/pytorch:1.9.1-cuda11.1-cudnn8-devel 查看本地已有镜像 $ docker images 创建容器 $ docke ...
- IC应届生40万白菜价!从业多年的资深专家手把手指导你如何选择offer!
这是IC男奋斗史的第1篇原创 关注公众号[IC男奋斗史],让我们一起撸起袖子加油干! 芯片行业2021年的秋招市场又是风起云涌.高手过招,继OPPO给应届生开出40万白菜价offer之后,平头哥又被爆 ...
- 在 TIME_WAIT 状态的 TCP 连接,收到 SYN 后会发生什么?
周末跟朋友讨论了一些 TCP 的问题,在查阅<Linux 服务器高性能编程>这本书的时候,发现书上写了这么一句话: 书上说,处于 TIME_WAIT 状态的连接,在收到相同四元组的 SYN ...
- Gopher必读:HttpClient的两个坑位
http是我们最常见的客户端/服务端传输协议,在golang中,默认的net/http包有一些坑位,需要调整以获得更加性能. 在golang程序中,我也遇到因为不合理使用 http client导致的 ...
- 一键生成的BI智能数据看板谁不爱?
随着互联网思维的深化,如财务.市场.运营.销售等越来越多的岗位,都开始重视并自发性的开始了解并学习数据分析,来引导帮助决策. 人力资源制定效能仪表盘,去实时掌握人员状况和人均效能,通过对招聘漏斗的分析 ...
- 简单的html js node 前端直接使用反向代理软件
先放上已经打包好的地址 https://gitee.com/Amengxiaoya/node-proxy.git 切记 proxyConfig.json 设置代理 ip为自己的ipv4地址 (cmd ...
- 程序与CPU,内核,寄存器,缓存,RAM,ROM、总线、Cache line缓存行的作用和他们之间的联系?
目录 缓存 什么是缓存 L1.L2.L3 为什么要设置那么多缓存.缓存在cup内还是cup外 MESI协议----主流的处理缓存和主存数据不一样问题 Cache line是什么已经 对编程中数组的影响 ...