题目描述
一天一只顽猴想要从山脚爬到山顶,途中经过一个有n个台阶的阶梯,但是这个猴子有个习惯,每一次只跳1步或3步。
试问?猴子通过这个阶梯有多少种不同的跳跃方式
输入描述
输入只有一个数n, 0 < n < 50
代表此阶梯有多个台阶
输出描述
有多少种跳跃方式
示例
示例1
输入
50
输出
122106097
解题思路
1、dp[i]的含义:到达i阶台阶一定有多少种跳跃方式
2、状态转移方程:dp[i] = dp[i - 1] + dp[i - 3]
3、数据初始化:dp[1] = 1; dp[2] = 1; dp[3] = 2;
4、循环及循环的顺序
C++代码实现
#include<iostream>
#include<vector>
using namespace std;
int main()
{
int n;
cin >> n;
vector<int> dp(n+1, 0);
dp[1] = 1; dp[2] = 1; dp[3] = 2;
for (int i = 4; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 3];
}
cout << dp[n] << endl;
return 0;
}