大意是給乙個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層生日蛋糕,每層都是乙個圓柱體。設從下往上數...