[算法][动态规划]跳台阶问题的变体(可一次跳三阶但仅能用一次或可跳任意阶)
发布时间
阅读量:
阅读量
变体题目一
已知小明在攀登楼梯时,每次仅能跨越1至2个台阶,且在任何时间点均可选择一次性跨越3个台阶,但此操作在整个过程中最多仅允许执行一次。假设小明从地面(即第0阶)出发,目标是抵达第n阶台阶,问共有多少种不同的行走方式,并将这些方式输出?
解题思路分析
【首先,这是一个对斐波那契数列的封装形式,具体可参考《[算法][动态规划]动态转移过程与Python实现小样两例(切绳子与跳台阶)》中的解释,此处不再赘述其动态转移方程。。
本题的关键难点 在于,额外引入了一次一步跳三阶的条件,从而对原有问题结构形成了干扰。
- 设定三个数组:其一为动态规划数组
res,其中res[i]表示到达第 i 层时所拥有的合法走法总数(“合法的走法”指的是至多 使用一次跨三阶的跳跃方式); - 其二为斐波那契数组
only2,其中only2[i]表示在到达第 i 层时完全不使用 跨三阶方式的所有走法数量(这些方法均属于合法范畴); - 其三为特例数组
ct3,其中ct3[i]表示到达第 i 层时必须包含一次跨三阶动作 的所有合法走法数目。
由此可以自然推得,通过公式 res[i] = res[i-1] + res[i-2] 所计算出的结果仅涵盖跨一阶和跨两阶的情
全部评论 (0)
还没有任何评论哟~
