#include <iostream>
#include <vector>

using namespace std;

int main() {
    int t;
    cin >> t; // 输入测试实例的个数
    vector<long long> dp(41, 0); // 定义一个大小为41的vector,初始化为0,用于存储不同级数楼梯的走法数量
    dp[1] = 1; // 第一级楼梯的走法数量为1
    dp[2] = 2; // 第二级楼梯的走法数量为2
    for (int i = 3; i <= 40; i++) {
        dp[i] = dp[i - 1] + dp[i - 2]; // 每一级楼梯的走法数量等于前一级和前两级楼梯的走法数量之和
    }
    while (t--) {
        int n;
        cin >> n; // 输入楼梯的级数
        cout << dp[n] << endl; // 输出楼梯的不同走法数量
    }
    return 0;
}

这段代码使用动态规划的思想,通过迭代的方式计算每一级楼梯的走法数量,并保存在一个vector中。最后输出第N级楼梯的走法数量。这种方法的时间复杂度为O(N),非常高效。

超级楼梯问题:动态规划解法

原文地址: https://www.cveoy.top/t/topic/bsvl 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录