POJ1190 生日蛋糕 經典搜尋題詳解優化

2021-10-18 16:45:23 字數 812 閱讀 7605

題目的思路很簡單,就是從底層開始遍歷,遍歷所有可能的r,h的值;

r,h的最直接取值是 (n,dep),但這樣太浪費時間,所以需要進行判斷r、h的取值範圍來剪枝;

r [dep,r[dep-1]

-1]//這裡的dep是層數,從上到下依次是 m~1

h [dep,

min(r[dep-1]

-1),

(n-sumv)

/(r*r)

)]

剪枝nb

#include

#include

#include

#include

#include

using

namespace std;

int minv[25]

,mins[25]

;int ans,n,m;

void

init()

}//第dep層的蛋糕半徑r與高度h,前

void

dfs(

int dep,

int sumv,

int sums,

int r,

int h)

if(sums+mins[dep-1]

>ans||sumv+minv[dep-1]

>n)

return

;for

(int i=r-

1;i>=dep;i--)}

}int

main()

POJ 1190 生日蛋糕

生日蛋糕 一道很經典也很基礎的搜尋題目。有題目的條件我們可以得到兩個方程 sum rk rk hk n 和 s sum 2 rk hk r1 r1 首先考慮極端剪枝法。假設前i層體積為t,如果剩下的若干層,每層都去最小可能值,體積仍比n大,則剪去,如果剩下幾層都去最大值,體積仍比n小,也減去。如果當...

POJ 1190 生日蛋糕

呵呵,這道題弄死我。我覺得吧,凡事不能急於求成,比如這道經典的剪枝 搜尋,我就先查的題解,看了各種剪枝方法躊躇滿志,結果花了兩個小時寫的剪枝把自己都搞暈了。應該先有正確的搜尋方法再談剪枝不是嗎,所以我決定先用樸素的搜尋做一下 include includeint n,m int temp s 999...

POJ 1190 生日蛋糕

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