Luogu P1731 生日蛋糕 dfs剪枝

2022-04-30 18:36:09 字數 806 閱讀 9260

#include#include

using

namespace

std;

int n,m,r[55],h[55],minn=0x7ffffff

;inline

int min(int x,int y)

inline

void dfs(int now,int rest,int s,int

z)

if(rest==0||now==m+1)return

;

if(s+r[1]*r[1]>=minn)return;//剪枝

if(r[now-1]*r[now-1]*h[now-1]*zreturn;//剪枝

for(int i=r[now-1]-1;i>=z;i--)}}

}int

main()

因此,像這樣稍微擴大一下搜尋範圍,對於1 1這組很小的資料就可以順利輸出3了。

而這一微小的鬼畜操作並不會對較大測試點造成多大影響。

(其實我發現如果r[0]與h[0]取得過大,例如n,會全輸出0 qaq 哪位巨佬可以告訴我呀?)

3.其實dfs的第三個if中,s+r[1]*r[1]>=minn是return的必要不充分條件,因為沒有記上之後拼的側面積。

因此,為了讓它更快,或許也可以往左邊式子裡面加上一些鬼畜的玩意,例如加上z,2*z,2*z*z等等。

(好吧我一開始就是洛谷巨佬題解的這個地方沒看懂)

4.好吧這題實在是太神奇了,我在洛谷上交了22次以上qaq

5.參考文獻:

LuoGu P1731 生日蛋糕

color 7月17日是 mr.w 的生日,acm thu 為此要製作乙個體積為的 m 層生日蛋糕,每層都是乙個圓柱體。設從下往上數第 i 1 leq i leq m 層蛋糕是半徑為 r i 高度為 h i 的圓柱。當 i時,要求 r i r 且 h i h 由於要在蛋糕上抹忌廉,為盡可能節約經費,...

P1731 生日蛋糕

原題鏈結 dfs 注意剪枝 這個剪枝還挺麻煩的 首先是最優性剪枝 如果當前的面積 之後可行的最小面積仍然大於現在的最優解 那麼捨去 可行性剪枝 如果當前的體積 之後可行的最大體積仍小於規定體積 捨去從大到小列舉是為了方便確定範圍 include include include include inc...

洛谷 P1731 生日蛋糕

7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層 生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當i include include include include using namespace std const int...