解題心得
這題的本質就是 fib ,原因是要找 n 能有幾種拼法,就是把 n-1 的所有方法再加上直立的一個磚塊,以及 n-2 的所有方法再加上兩個平躺磚塊。
網路上的解法比較多是事先建表。我的寫法是每次都會查表,而若以前做過就不會重做。
程式碼
#include <iostream> using namespace std; long long int memo[51] = { 0 }; long long int f(int n) { if (memo[n] != 0) return memo[n]; if (n <= 2) return n; memo[n] = f(n - 1) + f(n - 2); return memo[n]; } int main() { int n; while (cin >> n) { if (n == 0) break; cout << f(n) << endl; } return 0; }
沒有留言:
張貼留言