NOI1999 生日蛋糕(dfs剪枝)

2021-08-10 10:34:10 字數 996 閱讀 1035

我是超連結

我們可以很清晰的發現 s=

r12+

∑2ri

hi n

=∑ri

2hi

高階的剪枝操作!

1、你可以確定到達每個層數的體積最小值和面積最小值,最小的蛋糕是可以知道的(通過層數m可知)(預處理待用)

2、確定出每一層的最大的r和h(最小的r和h只能是層數m咯),最大的r可以通過最大化現在的體積除以最小的h得到,最大化現在的體積就可以用現在的體積減去未來可以取到的最小的體積(預處理的結果)

3、如果現在還需要湊的體積連未來最小的體積都不能達到的話,return

4、如果現在的s加上可能湊到的最小的面積還不能比我們找到的最優解大的話,return

5、如果剩下的體積除以最大的r(得到最小的s)還不能小於最優解的話,return

第5步比較難想

#include 

#include

#include

#include

#define ll long long

#define inf 1e9

using namespace std;

ll ans=inf+1;int m,n,minv[50],mins[50];

void dfs(int

m,int n,ll s,int r,int h)

if (nm] || s+mins[m]>=ans || 2

*(n/r)+s>=ans) return;

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

}int main()

dfs(m,n,0,(int)ceil((double)(n-minv[m-1])/m)+2,(int)ceil((double)(n-minv[m-1])/(m*m))+2);

if (ans>inf) printf("0");else

printf("%d",ans);

}

noi 1999 生日蛋糕

題目描述 4月16日是nanae的生日,josnch為此要製作乙個體積為n 的m層生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為ri,高度為hi的圓柱。當i m時,要求ri ri 1且hi hi 1。由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面 最下一層的下...

NOI1999 生日蛋糕

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

NOI1999 生日蛋糕

7月17日是mr.w的生日,acm thu為此要製作乙個體積為n 的m層 生日蛋糕,每層都是乙個圓柱體。設從下往上數第i 1 i m 層蛋糕是半徑為 r i 高度為 h i 的圓柱。當i r i r 且 h i h 由於要在蛋糕上抹忌廉,為盡可能節約經費,我們希望蛋糕外表面 最下一層的下底面除外 的...