ACWING168 生日蛋糕(剪枝dfs)

2021-09-29 11:13:20 字數 1282 閱讀 6119

月17日是mr.w的生日,acm-thu為此要製作乙個體積為nπ的m層生日蛋糕,每層都是乙個圓柱體。

設從下往上數第i層蛋糕是半徑為ri, 高度為hi的圓柱。

當i < m時,要求ri > ri+1且hi > hi+1。

由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面(最下一層的下底面除外)的面積q最小。

令q = sπ ,請程式設計對給出的n和m,找出蛋糕的製作方案(適當的ri和hi的值),使s最小。

除q外,以上所有資料皆為正整數 。

輸入格式

輸入包含兩行,第一行為整數n(n <= 10000),表示待製作的蛋糕的體積為nπ。

第二行為整數m(m <= 20),表示蛋糕的層數為m。

輸出格式

輸出僅一行,是乙個正整數s(若無解則s = 0)。

資料範圍

1≤n≤10000,

1≤m≤20

輸入樣例:

1002

輸出樣例:

68思路:從最下一層向上列舉,確定了最下一層就能夠確定表面層的面積,之後的層就是算邊上的面積。到了最上面一層就確定了結果,遍歷完所有結果,答案取最小的即可。

然後再加上幾個剪枝:

當前體積+剩餘層數最小體積不能大於總體積。當前面積加上剩餘層數最小面積不能大於當前最優解。當前面積加上剩餘體積的最小面積不能大於最優解。

#include

#include

#include

#include

using

namespace std;

const

int inf =

0x3f3f3f3f

;int n,m,ans,v,s;

int h[

10005

],r[

10005

],minv[

10005

],mins[

10005];

void

dfs(

int dep)

for(r[dep]

=min((

int)

sqrt

(n - v)

,r[dep +1]

-1);r[dep]

>= dep;r[dep]--)

}}intmain()

ans =0;

dfs(m)

;printf

("%d\n"

,ans)

;return0;

}

AcWing 168 生日蛋糕

題目描述 7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i層蛋糕是半徑為ri,高度為hi的圓柱。當i m時,要求ri ri 1且hi hi 1。由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面 最下一層的下底面除外 的面...

1710 生日蛋糕

1710 生日蛋糕1999年noi全國競賽 時間限制 2 s 空間限制 128000 kb 7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當iri 1且hi hi 1。由於要在...

poj 1190 生日蛋糕(DFS 剪枝)

生日蛋糕 time limit 1000ms memory limit 10000k total submissions 12965 accepted 4564 description 7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數...