POJ 1190 生日蛋糕(DFS 剪枝)

2022-04-06 17:13:45 字數 807 閱讀 1341

剪枝:1.上下界剪枝:

在dep層時,列舉r和h可以在某乙個區間裡列舉

2.優化搜尋順序:

使用倒序列舉

3.可行性剪枝:

預處理出最小體積和側面積。

如果當前體積v加上1~dep-1層額最小體積大於n,可以剪枝。

4.最優性剪枝

ac**:

1 #include2 #include3 #include4

using

namespace

std;

5const

int inf=0x7f7f7f7f;6

const

int n=30;7

int n,m,ans=inf;

8int h[n],r[n],s=0,v=0

,minv[n],mins[n];

9void dfs(int

dep)

14for(r[dep]=min((int)sqrt((double)n-v),r[dep+1]-1);r[dep]>=dep;r[dep]--)

15for(h[dep]=min((int)((double)(n-v)/r[dep]/r[dep]),h[dep+1]-1);h[dep]>=dep;h[dep]--)27}

28int

main()

35 h[m+1]=r[m+1]=inf;

36dfs(m);

37 printf("

%d\n

",ans);

38return0;

39 }

ac**

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...