AcWing 168. 生日蛋糕

  • 题目
  • 思路
    • 代码

题目传送门

题解思路参考大佬

题目

7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为 NπNπNπ 的 MMM 层生日蛋糕,每层都是一个圆柱体。

设从下往上数第i层蛋糕是半径为 RiR_iRi​ , 高度为 HiH_iHi​ 的圆柱。

当i<Mi < Mi<M 时,要求 Ri>Ri+1R_i > R_i+1Ri​>Ri​+1 且Hi>Hi+1H_i > H_i+1Hi​>Hi​+1。

由于要在蛋糕上抹奶油,为尽可能节约经费,我们希望蛋糕外表面(最下一层的下底面除外)的面积Q最小。

令Q=SπQ = SπQ=Sπ ,请编程对给出的N和M,找出蛋糕的制作方案(适当的RiR_iRi​和HiH_iHi​的值),使S最小。

除Q外,以上所有数据皆为正整数 。

输入格式

输入包含两行,第一行为整数N(N<=10000)N(N <= 10000)N(N<=10000),表示待制作的蛋糕的体积为NπNπNπ。

第二行为整数M(M<=20)M(M <= 20)M(M<=20),表示蛋糕的层数为MMM。

输出格式

输出仅一行,是一个正整数S(若无解则S = 0)。

数据范围

1≤N≤10000,1≤M≤201≤N≤10000 , 1≤M≤201≤N≤10000,1≤M≤20

输入输出样例

样例输入1

100
2

样例输出1

68

思路

dfs。

代码

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
const int N = 25, INF = 1e9;
int n, m, R[N], H[N], minv[N], mins[N];
int ans = INF;
void dfs(int u, int v, int s) {if(v + minv[u] > n) return;if(s + mins[v] >= ans) return;if(s + 2 * (n - v) / R[u + 1] >= ans) return;if(!u) {if(n == v) ans = s;return;} for(int r = min(R[u + 1] - 1, (int)sqrt(n - v)); r >= u; r--)for(int h = min(H[u + 1] - 1, (n - v)/r/r); h >= u; h--) {int t = 0;if(u == m) t = r * r;R[u] = r, H[u] = h;dfs(u - 1, v + r * r * h, s + 2 * r * h + t);}
}
int main() {cin >> n >> m;for(int i = 1; i <= m; i++) {minv[i] = minv[i - 1] + i * i * i;mins[i] = mins[i - 1] + 2 * i * i;}R[m + 1] = H[m + 1] = INF;dfs(m, 0, 0);cout << ans << endl;return 0;
}

168. 生日蛋糕(DFS)相关推荐

  1. AcWing 168 生日蛋糕【DFS 剪枝 ☆】

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

  2. POJ - 1190 生日蛋糕(dfs+剪枝)

    题目链接:点击查看 题目大意:给出生日蛋糕的总体积,以及有多少层,我们要求下面的每一层的高度和半径都要比上面一层的大,并且都是整数,求满足要求的最小表面积 题目分析:因为题目提到了半径和高度都是整数, ...

  3. c++画蛋糕_poj1190 生日蛋糕 dfs

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

  4. AcWing 168 生日蛋糕

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

  5. 生日蛋糕 dfs剪枝优化

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

  6. poj1190 生日蛋糕 dfs

    传送门:poj1190 由于高度和半径都是整数因此可以用bfs来做,关键是如何剪枝.由于蛋糕是一层层摞上去的,而最底层下底面面积又不算,因此所有底面积的和就相当于一个底面积,即最下面那一层的上底面的面 ...

  7. 算法——AcWing算法提高课中代码和题解

    文章目录 第一章 动态规划 (完成情况:64/68) 数字三角形模型 最长上升子序列模型 背包模型 状态机模型 状态压缩DP 区间DP 树形DP 数位DP 单调队列优化DP 斜率优化DP 第二章 搜索 ...

  8. AcWing-算法提高课【合集】

    算法提高 动态规划 数字三角形 1015. 摘花生 1018.最低通行费 1027. 方格取数 最长上升子序列LIS 1017. 怪盗基德的滑翔翼 1014.登山 482.合唱队形 1012. 友好城 ...

  9. AcWing算法提高课笔记

    目录 Level2 1.动态规划--从集合角度考虑DP问题 1.1 数字三角形模型 1.1.1摘花生 1.1.2最低通行费 1.1.3方格取数 1.1.4传纸条 1.2 最长上升子序列模型 1.2.1 ...

最新文章

  1. matlab中.P文件的介绍
  2. python多线程和异步性能对比_python对比线程,进程,携程,异步,哪个快
  3. 测试一体机风扇分贝软件,9款小风扇深度横评,风力、噪音测试加拆解,告诉你谁最值得买...
  4. linux安装指定版本python_ubuntu多版本python为指定版本python安装库
  5. react接收后端文件_React如何从后端获取数据并渲染到前端?
  6. pku2777 Count Color
  7. 磁盘阵列(RAID)
  8. Zero Shot | 一文了解零样本学习
  9. ipsec nat-t
  10. APP扫码登录WEB系统
  11. 【安装sql 2008步骤】
  12. 解决java.lang.NoClassDefFoundError: com.android.tools.fd.runtime.AppInfo
  13. wifi分析仪怎么看哪个信道好_四大实用WiFi检测工具,调整信道避免干扰
  14. 【Spring】SpringAOP切面类
  15. 如何对全站进行死链接检测?
  16. python课程设计结果分析_python课程设计报告总结和体会
  17. UART使用EDMA收发
  18. 【SCI论文攥写】注意事项
  19. 为什么阿里会选择 Flink 作为新一代流式计算引擎?
  20. Android如何自定义服务器DynamicMockServer的使用

热门文章

  1. 线上线下课程教学培训小程序开发制作功能介绍
  2. leetcode649(Dota2 参议院:循环队列)
  3. Fedora 34安装Wine、微信
  4. android java 启用4g_android下4G上网卡
  5. mysql zfs快照_Solaris ZFS 快照和克隆使用指南
  6. 考研计算机网络公安大学,2017年中国人民公安大学安全工程823计算机学科专业基础综合[专业硕士]之计算机网络考研仿真模拟题...
  7. 大数据能做什么,为什么学习大数据
  8. android 播放固定频率的声音,Android 播放指定频率正弦波声音
  9. SAS | macro variables macro
  10. [陶陶啊……]陶陶摘苹果