积木问题

     有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)

 

代码如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值