【題解】ZeroJudge d212: 東東爬階梯

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=d212
【解題想法】DP

【作法1】遞迴(TLE)

#include <iostream>
using namespace std;

long long f(int x) {
    if (x == 0 || x == 1) return 1;
    else return f(x-1) + f(x-2);
}

int main() {
    int n;
    
    while (cin >> n) {
        cout << f(n) << endl;
    }
    return 0;
}

【作法2】迭代(AC)

#include <iostream>
using namespace std;

int main() {
    int n;
    long long f[100] = {0};
    f[0] = 1;
    f[1] = 1;
    for (int i=2; i<100; i++) {
        f[i] = f[i-1] + f[i-2];
    }
    
    while (cin >> n) {
        cout << f[n] << endl;
    }
    return 0;
}

【作法3】更節省記憶體(AC)

#include <iostream>
using namespace std;

int main() {
    int n;
    while (cin >> n){
        long long a = 1, b = 1;
        for (int i = 0; i < n; i++){
            b = a + b;
            a = b - a;
        }
        cout << a << "\n";
    }
}
分享本文 Share with friends