【】 生日蛋糕

传送门

题意

体积固定为 \(n \pi\) 、固定\(m\)层,每一层都是一个圆柱体,从上往下

  • 圆柱的半径必须是递减的,即\(r[i+1]>r[i]\)

  • 圆柱的高度必须是递减的,即\(h[i+1]>h[i]\)

找出一个方案使得整个圆柱的外表面积最小(除了最底下那一层的下低面),最后的答案除\(\pi\)

数据范围

\(\begin{array}{l}1 \leq N \leq 10000 \\ 1 \leq M \leq 20\end{array}\)

题解

状态包含的状态有当前的层数、已经确定的体积、已经确定的面积,题目中对最后的答案除圆周率,所以可以直接忽略
剪枝:

  1. 优化搜索顺序

    • 蛋糕从底向上搜索
  2. 上下界剪枝

    • 当前的半径一定小于上一层,最大是上一层\(-1\)\(\sqrt{n-v}\)

    • 当前的高度也一定小于上一层,最大是上一层\(-1\)\(\frac{n-v}{R^{2}}\)

高度中有一个需要根据\(R\)求出所以先枚举\(R\)
\(R \in [ deep , min( |\sqrt{n-v}|, r[deep+1]-1 ) ]\)
\(H \in [ deep , min( \frac{n - v}{ R^{2}} , h[deep +1) -1 ]\)
3. 可行性剪枝
预处理从上往下前 \(i\) 层的最小体积和侧面积,\(1\sim i\) 层的高度和半径最小为\(1,2,\dots,i\),如果当前的体积加上前 \(i\) 层的最小体积\(>n\)直接回溯

  1. 最优性剪枝

    • \(i\)层表面积加上前面已经得到的侧面积大于搜索到的答案,剪枝

    • \(1\sim u\)层的体积 = \(1\sim u\)层的面积为

因为\(n-v\)可以求得,所以放缩成用\(n-v\)表示的不等式
\(\frac{2 \cdot(n-v)}{R_{u+1}}+S\)大于已搜到的答案的时候,剪枝

Code


posted @ 2020-10-09 23:17  Hyx'  阅读(81)  评论(0)    收藏  举报