最新华为OD机试
题目描述
一天一只顽猴想去从山脚爬到山顶,途中经过一个有个N个台阶的阶梯,但是这猴子有一个习惯:
每一次只能跳1步或跳3步,试问猴子通过这个阶梯有多少种不同的跳跃方式?
输入描述
输入只有一个整数N(0<N<=50)此阶梯有多少个台阶。
输出描述
输出有多少种跳跃方式(解决方案数)。
示例1
输入
50
输出
122106097
说明
无
示例2
输入
3
输出
2
说明
无
解题思路
针对题目“顽猴跳阶梯”的解题思路可以总结如下:
问题分析:
猴子只能以1步或3步的方式跳跃,因此在爬完N个台阶之前,每一个台阶的跳跃方式都取决于之前的台阶状态。可以将这个问题转换为动态规划问题。
动态规划思路:
-
状态定义:
- 设
dp[i]
表示到达第i
个台阶的不同跳跃方式的数量。
- 设
-
状态转移方程:
- 猴子到达第
i
个台阶可以通过以下两种方式:- 从第
i-1
个台阶跳1步到达i
,此时的跳跃方式为dp[i-1]
。 - 从第
i-3
个台阶跳3步到达i
,此时的跳跃方式为dp[i-3]
(需要保证i-3
>= 0)。因此可以得出转移方程:
[
- 从第
- 猴子到达第