DFS--POJ 1190 生日蛋糕
Description
7月17日是Mr.W的生日,ACM-THU為此要制作一個體積為Nπ的M層生日蛋糕,每層都是一個圓柱體。
設從下往上數第i(1 <= i <= M)層蛋糕是半徑為Ri, 高度為Hi的圓柱。當i < M時,要求Ri > Ri+1且Hi > Hi+1。
由于要在蛋糕上抹奶油,為盡可能節約經費,我們希望蛋糕外表面(最下一層的下底面除外)的面積Q最小。
令Q = Sπ
請編程對給出的N和M,找出蛋糕的制作方案(適當的Ri和Hi的值),使S最小。
(除Q外,以上所有數據皆為正整數)
Input
有兩行,第一行為N(N <= 10000),表示待制作的蛋糕的體積為Nπ;第二行為M(M <= 20),表示蛋糕的層數為M。
Output
僅一行,是一個正整數S(若無解則S = 0)。
Sample Input
100
2
Sample Output
68
Solution
由于深度一定(m),所以使用深度優先搜索,自上而下的設定蛋糕序號,最頂層的為第1層,……,最底層的蛋糕為第m層,很明顯滿足題目條件的前i層的(從頂層(也就是編號為1的層)開始計數)最小面積mins[i]和體積minv[i]是在該層的半徑以及高度都為i時取得,如果采用一般的神搜肯定會超時,所以這題還需要剪枝,剪枝條件有(從m層向上搜,假設前level層的體積為v,面積為s,當前所得的最小面積為best):
1>因為前level層的體積為v,如果剩下的幾層的體積都取最小可能值,總體積還是比n大,那么則說明前level層的方案不可行,所以可以剪枝(剪枝條件為:v+minv[dep-1]>n)
2>因為前level層的面積為s,如果剩下的幾層的面積都取最小可能值,所得的面積和比已經得到的所求的最小面積best大,也可以進行剪枝(剪枝條件為:s+mins[dep-1]>best)
3>因為前level層的體積為v,那么剩余的m-level層的體積滿足:n-v=(hk+……+hm)(k=level+1,……,m)
而剩余部分的表面積滿足:lefts=2*(r[k]h[k]+……+r[m]h[m])>2(n-sv)/r[level] (k=level+1,……,m)
顯然有上述不等式lefts=best-s>2(n-)/r,即2*(n-v)/r+s
總結
以上是生活随笔為你收集整理的DFS--POJ 1190 生日蛋糕的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 什么是jstl(实例化又是什么)
- 下一篇: 带权并查集--hdu3047 ZJnu