地址 https://algospot.com/judge/problem/read/ASYMTILING
#include <iostream>
using namespace std;
const int N = 150;
const int MOD = 1e9 + 7;
int dp[N];
int asydp[N];
int c, n;
void InitDp() {
dp[0] = 1;
dp[1] = 1;
dp[2] = 2;
for (int i = 3; i < N; i++) {
dp[i] = (dp[i - 2] + dp[i - 1])%MOD;
}
return;
}
void InitAsyDp() {
asydp[0] = 1;
asydp[1] = 0;
asydp[2] = 0;
asydp[3] = 2;
asydp[4] = 2;
for (int i = 5; i < N; i++) {
asydp[i] = (dp[i - 3] *2) % MOD;
asydp[i] = (asydp[i] + asydp[i - 2]) % MOD;
asydp[i] = (asydp[i] + asydp[i - 4]) % MOD;
}
return;
}
int main()
{
cin >> c;
InitDp(); InitAsyDp();
while (c--) {
cin >> n;
cout << asydp[n] << endl;
}
return 0;
}