通过木块砌墙题目体会动态规划算法


木块砌墙题目:

用三种木块,搭建k×2n×1的墙,不能翻转、旋转木块(0≤ n≤ 1024 ,1 ≤ k ≤ 5),计算有多少种方案,输出结果对1000000007取模。


图1 木块与墙

 

该题目是在庞果网(http://hero.pongo.cn/)第一次看到,但是由于该网站的特殊之处,现在看不到了,不过可以在这看到http://tieba.baidu.com/p/2351476089

 

在解题之前,首先感谢庞果网的热心网友们的激情讨论,才让我的思路渐渐清晰成熟起来。

 

  • 分析

看到n可以取值1024,即21024,这是一个很庞大的数字,一般不会也不可能计算出该数据再做处理,正常的思路是要想办法减低问题规模,并找出大规模问题与小规模问题之间的关系。该题目可以采用动态规划算法,将原问题递归划分为子问题,依据边界条件计算出子问题的解,然后根据子问题的状态及子问题之间的状态转移关系组合出原问题解。

墙与木块的厚度都为1,则可以只考虑宽度和高度(k×2n),进一步降低思考的难度。假设该问题结果用F(n,k)表示,由题目可知墙的宽度随着n增加1而增加一倍,所以降低n则可以快速降低问题规模。若能够找出最优子结构满足F(n,k) = g(F(n-1,k)); g()为子问题根据状态即状态转移关系合并子问题的策略。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值