- Reference
	
- Complexity
	- DP问题的复杂度需要具体情况具体分析,粗略来说复杂度取决于状态转移方程,例题的时间复杂度为:\mathcal{O(N)}
 
P2437 蜜蜂路线 - 洛谷 | 计算机科学教育新生态
|  | DP五部曲 | 👇🏻对于此题 | 
|---|
| 确定 dp[i]含义 |  | 第 i个fib()数值为dp[i] | 
| 递推公式 |  | dp_n = dp_{n-1} + dp_{n-2} | 
| dp[]如何初始化 |  | dp_0 = 1 \quad dp_1 = 1 | 
| 遍历顺序 |  | 从前向后 | 
| 打印 dp[] | DEBUG |  | 
Template Code (对于 DP 来说,模版没什么用,重点还是看上面的五部曲)
C++
对于通过此题,还需要高精度,但本文讲动态规划,所以不涉及那部分内容,通过两个测试点即可
//build: g++ P1605.cpp -std=c++20 -o P1605
#include <iostream>
#include <vector>
void solve();
int main(){
    solve();
    return 0;
}
void solve() {
    int m, n;
    std::cin >> m >> n;
    n = n - m;
    // std::vector<BigInt> dp(n + 1);
    std::vector<BigInt> dp(3);
    dp[0] = 1; dp[1] = 1; // 由题目信息定义
    
    for (int i = 2; i <= n; ++i) { // 这里 fib 从 0 开始,所以求到 n --- f(0) = 1, f(1) = 1
        // 开 n 长 vector 的做法
        // dp[i] = dp[i - 1] + dp[i - 2];
        // dp[i - 2] = dp[i - 1];
        // dp[i - 1] = dp[i];
        // 三个变量的做法
        dp[2] = dp[1] + dp[0];
        dp[0] = dp[1];
        dp[1] = dp[2];
    }
    std::cout << dp[2] << std::endl;
}