杭电OJ之动态规划专题-ACM2041(超级楼梯)、2044(一只小蜜蜂)、2059(龟兔赛跑)、2084(数塔)

动态规划算法:基本思想是将一个问题分解为若干个子问题,对每个子问题求得最优解,并最终通过特定的结构串成大问题的最优解.(我们通常采用“自底朝上”的“备忘录”法和“从顶朝下”的逆推法方式找出关系式,同时已知首项的值进行求解。)

解题步骤:Ⅰ.理解子问题的含义与其最优解的构造,并且刻画其结构特征(应当定义一个数组保存历史数据).

Ⅱ.找出前后项的递归/递推(☆)关系式,并保存在相应的数组中.

Ⅲ.找出初始值,并储存在数组首项中;最终可通过Ⅱ中的关系式得出原题的最优解.

法一:“备忘录”法

(例:杭电OJ2041-超级楼梯)

http://t.csdn.cn/VAv24

题干分析:要计算到达某阶级的总方案数数,先设到达n级的总方案为f(n),而因每一只能走1级或2级,则f(n)的大小应为第(n-1)级与第(n-2)级的方案数之和,即f(n)=f(n-1)+f(n-2).

但是当我们使用(暴力)递归时,即从顶部推回到底部(f(2)=1,f(3)=2)的方案数时,往往因为计算量过大而超时;所以我们可以采用“自底朝上”的方式,对于递增的每一级方案数进行“备忘录”式的保存,最终顺利得出第n级的方案总数!

进阶版——(例:杭电OJ2059-龟兔赛跑)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值