题解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底= ...
随机推荐
- 基于TI DSP TMS320C6678、Xilinx K7 FPGA XC7K325T的高速数据处理核心板
一.板卡概述 该DSP+FPGA高速信号采集处理板由我公司自主研发,包含一片TI DSP TMS320C6678和一片Xilinx FPGA K7 XC72K325T-1ffg900.包含1个千兆网口 ...
- CentOS7下修改默认网卡名为eth0的方法
1.修改网卡配置文件中的 DEVICE=参数的,关于eth0 [root@ansheng ~ ]# cd /etc/sysconfig/network-scripts/ [root@ansheng n ...
- java的不正确使用方法以及什么情况不能使用java
一.Python3.6新特性 什么情况下不能运用 Java 泛型 1. 前语 Java 1.5 引入了泛型来保证类型安全,避免在运行时发作类型转换反常,让类型参数化,提高了代码的可读性和重用率.可 ...
- 使用IDEA新建一个Spring Boot项目
本文使用Spring Initializer来创建 开发环境 操作系统:Windows 10 IDEA:2020.3.2 JDK:1.8 1. 启动IDEA,选择New Project(新建工程): ...
- IP网络主动测评系统——IT运维人员的好帮手
一.前 言 随着计算机网络的普及和快速发展,互联网已经融入到人们的衣食住行等方方面 面,如工作.购物.音视频聊天.视频会议.朋友圈.抖音.在线网游.网络电影 电视等.毫不夸张地说,现如今大部分人的绝大 ...
- 【C# 基础概念】Unicode编码详解
Unicode定义:Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字 ...
- 关于JS继承
关于JS继承 关于继承这个概念,是由面向对象衍生出来的.而JS身为一种基于面向对象而设计的语言,它和正统的面向对象语言又是有差别的. 面向对象语言 身为面向对象语言需要对开发者提供四种能力: ①:封装 ...
- 图解volatile
volatile是什么 出去面试的时候,很多面试官都会问你:说说你对volatile的理解. 下面我将用图的方式告诉大家,volatile是什么? 如上图所示:每个线程都有自己的工作内存,同时还能访问 ...
- 一张图看懂IaaS, PaaS和SaaS的区别
转至:https://blog.csdn.net/liujg79/article/details/84453736 编译:老夫子 原文:https://www.bmc.com/blogs/saas-v ...
- spring 核心容器api
spring api : https://docs.spring.io/spring-framework/docs/current/javadoc-api/ BeanFactory 才是 Spring ...