2 条题解

  • 1
    @ 2025-6-7 20:23:10
    
    #include <iostream>
    #include <vector>
    #include <string>
    #include <algorithm>  // 添加这行
    using namespace std;
    
    vector<string> dp(6001);
    
    string addStrings(string num1, string num2) {
        string res;
        int i = num1.size()-1, j = num2.size()-1;
        int carry = 0;
        while(i >= 0 || j >= 0 || carry) {
            int n1 = i >= 0 ? num1[i--]-'0' : 0;
            int n2 = j >= 0 ? num2[j--]-'0' : 0;
            int sum = n1 + n2 + carry;
            res.push_back(sum%10 + '0');
            carry = sum/10;
        }
        reverse(res.begin(), res.end());
        return res;
    }
    
    void precompute() {
        dp[0] = "1";
        dp[1] = "1";
        for(int i = 2; i <= 6000; i++) {
            dp[i] = addStrings(dp[i-1], dp[i-2]);
        }
    }
    
    int main() {
        precompute();
        int n;
        cin >> n;
        cout << dp[n] << endl;
        return 0;
    }
    
    

    信息

    ID
    1227
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    递交数
    224
    已通过
    22
    上传者