DP2 跳台阶【牛客网】
文章目录
- 零、原题链接
- 一、题目描述
- 二、测试用例
- 三、解题思路
- 四、参考代码
零、原题链接
DP2 跳台阶
一、题目描述
二、测试用例
三、解题思路
- 基本思路:
动态规划题目的难点基本在于构造状态转移方程,对应这题,我们可以发现每次跳跃我们可以选择跳一阶还是二阶,跳一阶是一种可能,跳两阶也是一种可能,后续选择怎么跳和当前选择怎么跳是有关系。倒过来看,总的跳跃方法可以变成最后一次是跳一阶的方法和最后一次是跳两阶的方法,最后一次跳一阶的方法数量有可以拆分成倒数第二次跳一阶和跳两阶的总和,依次类推,我可以得到状态转移方程: f ( n ) = f ( n − 1 ) + f ( n − 2 ) f(n)=f(n-1)+f(n-2) f(n)=f(n−1)+f(n−2) - 具体思路:
根据状态转移方程,其实就是求斐波那契数列,我们可以初始化两个变量都为 1,然后互相累加,直到算到第 n 个数为止。
四、参考代码
时间复杂度: O ( n ) \Omicron(n) O(n)
空间复杂度: O ( 1 ) \Omicron(1) O(1)
#include <iostream>
using namespace std;int main() {int n;cin >> n;int a = 1, b = 1;for (int i = 1; i < n; i+=2) {b += a;a += b;}if (n % 2 == 0) {cout << b;} else {cout << a;}
}
// 64 位输出请用 printf("%lld")