poj1190 生日蛋糕 搜尋 剪枝

2021-06-25 19:42:07 字數 763 閱讀 7052

首先寫出最裸的剪枝。

我們可以發現第i層最小的r和h都是i(從上到下)

這樣列舉就可以變小一點。

剪枝1:

若現在蛋糕體積太大(即剩下的蛋糕都按最小規格體積都會超 sumv+minv【m-flor】>n)

或者表面積太大(即剩下的蛋糕都按最小規格體積都會超 sums+mins【m-flor】>當前ans)

那麼就不用往下了。

剪枝2:

剩下的都按當前半徑為r的規格放都會比當前ans大(即在極限狀態下都無法得到更優解)

就不用往下了。

剪枝3:

對最大高度的限制,即min

至於為何是min 可以按可行性理解。

#include #include #include #include #include using namespace std;

int n,m,ans;

int mins[50],minv[50];

void dfs(int flor,int r,int h,int sumv,int sums)

int maxh=min(h-1,(n-sumv-minv[m-flor-1])/(i*i));

for(int j=maxh;j>=m-flor;j--)

}}int main()

ans=0x3f3f3f3f;

dfs(0,n,n,0,0);

printf("%d\n",ans);

return 0;

}

poj 1190 生日蛋糕(DFS 剪枝)

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

POJ1190 生日蛋糕(DFS剪枝)

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

POJ 1190 生日蛋糕(DFS 剪枝)

本題是一道dfs 剪枝的經典例題,詳情請看 注釋,裡面按照我個人的理解進行了詳細的解釋 include include include include include include include include include include include using namespace st...