有N块积木,我们需要用这些积木造塔。每个塔有H层,最底层包含M块积木;对于上面的每一层,包含的积木块数必须比下面一层的多1或者少1.
给定输入条件:积木数N,塔的层数H,最底层的积木数M,积木不一定要用完。求方案总数
使用动态规划的方法。同时使用剪枝条件进行剪枝
剪枝条件:当前剩余的积木数量不足以构建H层的塔,则终止当前的方案
当前剩余的积木数量大于所需的最大数量:每层递增1的所有层的和。同时如果底层积木数M大于层数H,则有2h 种方案。当前构造停
止。
动态规划的方法:设当前层积木数量为c,剩余积木数为a,当前层数为b。则所需最大积木数为(h-b+1)*(c+c+h-b)/2;,所需最小积木数为(c+1)*c/2+2*(h-b+1-c)-(h-b+1-c)/2;
F(a,b,c)=f(a-c,b+1,c+1)+f(a-c,b+1,c-1)
代码如下