POJ1190 搜尋加剪枝

2021-07-04 02:29:04 字數 973 閱讀 9639

大意是給乙個m層的蛋糕,體積加起來為nπ,蛋糕的下一層的半徑和高必須要同時大於上一層,求最小的表面積qπ。(這裡所有的數都是整數)

剛開始對這道提一點思路都沒有,後來想到要一層一層列舉,但是還是具體的思路,感覺寫搜尋這方面的題一定要有思路,對這道來講最重要的是確定每層半徑和高的上下界,還有剪枝,於是乎看了別人的思路後自己也總結了一下。

1、由於每層都不同所以最上層最小是1,最下層最大是n,同時自頂向下

minv[i] = minv[i-1] + i*i*i;

mins[i] = mins[i-1] + 2*i*i;所以先初始化。

2、然後就是別人所說的神剪枝了,大意是當前解+剩餘資源的最優解》=最優解時要剪枝。

上**sumv表示當前的體積,sums表示當前面積

#include 

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int minv[22], mins[22];

int n, m, ans;

void init()

}void dfs(int dep, int sumv, int sums, int r, int h)//從底向上

return;

}if (sumv + minv[dep-1] > n || sums + mins[dep-1] > ans || sums + 2*(n-sumv)/r >= ans )//最後的等號加與不加竟然分別是16ms與

return; //47ms

for (int i = r-1; i >= dep; i--)

}int main()

詳解 poj 1190 深搜 加 剪枝

這道題用到 深搜 但是必須剪枝,否則一定超時 我把注釋都寫在程式上了,大家可以一邊看一邊理解 剪枝地方還是要說明一下 遇到三種情況我們就不必搜下去了,需要剪掉 1 v minv m 1 n 當前的體積,加上該層以上的最小體積都比總體積大,一定不符合條件!2 s mins m 1 ans 當前的表面積...

poj1190 生日蛋糕 搜尋 剪枝

首先寫出最裸的剪枝。我們可以發現第i層最小的r和h都是i 從上到下 這樣列舉就可以變小一點。剪枝1 若現在蛋糕體積太大 即剩下的蛋糕都按最小規格體積都會超 sumv minv m flor n 或者表面積太大 即剩下的蛋糕都按最小規格體積都會超 sums mins m flor 當前ans 那麼就不...

poj 1190 生日蛋糕(DFS 剪枝)

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