用 2×1 的小矩形鋪滿 2×N 的大矩形,求方案數。遞推公式:f[n] = f[n-1] + 2*f[n-2],f[0]=0, f[1]=1, f[2]=3。
f[n-1] 種。f[n-2] 種。2*f[n-2] 種。合併得 f[n] = f[n-1] + 2*f[n-2]。
#include <iostream>
using namespace std;
const int N = 40;
long long f[N];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
f[0] = 0; f[1] = 1; f[2] = 3;
for (int i = 3; i < N; ++i)
f[i] = f[i-1] + 2 * f[i-2];
int n;
cin >> n;
while (n--) {
int m;
cin >> m;
cout << f[m] << '\n';
}
return 0;
}
O(N),查詢 O(1)。O(N)。