[leetcode]动态规划:斐波那契数列

一.线性dp

1.0什么是线性dp

    线性DP就是指状态的转移具有线性递推关系,每个状态只依赖之前的状态,按照线性顺序一步步递推下去。

1.1斐波那契数列问题

#include
#include

using namespace std;

int main() {
    int k;
    cout << "请输入你需要几个斐波那契数 : ";
    cin >> k;
    // 初始化向量 dp 并设置初始值
    vector dp(k);
    dp[0] = 1;
    // 当 k 大于 1 时,设置第二个元素的值
    if (k > 1) {
        dp[1] = 1;
    }
    // 生成斐波那契数列的后续项
    for (int i = 2; i < k; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    // 输出斐波那契数列
    for (const auto& num : dp) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}

1.2青蛙跳台阶问题(每次只可以跳一个台阶或者两个台阶)

#include
#include

using namespace std;

int main() {
    int k;
    cout << "请输入台阶的级数 : ";
    cin >> k;
    // 初始化向量 dp 并设置初始值
    vector dp(k);
    dp[0] = 1;
    // 当 k 大于 1 时,设置第二个元素的值
    if (k > 1) {
        dp[1] = 2;
    }
    // 生成斐波那契数列的后续项
    for (int i = 2; i < k; i++) {
        dp[i] = dp[i - 1] + dp[i - 2];
    }
    // 输出斐波那契数列
    cout << k << "级的台阶的攀爬方法数有 : ";
    for (const auto& num : dp) {
        cout << num << " ";
    }
    cout << endl;
    return 0;
}

你可能感兴趣的:(leetcode,动态规划,算法)