#include#includeusing
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...