【題目敘述】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";
}
}