算法竞赛2022年第十三届蓝桥杯C++ B组_积木画
#include<iostream>
#include<algorithm>
using namespace std;
const int N = 1e7+7, mod = 1e9+7;
int f[N][4];
int n;
int main()
{
cin >> n;
//n=3;
f[1][0] = 1;// 空白2X1
f[1][1] = 0;// 下空白1X1
f[1][2] = 0;// 上空白1X1
f[1][3] = 1;// 拼满2X1
for (int i = 2; i <= n ; i ++ )
{
f[i][0] = f[i - 1][3];
// f[i - 1][0]+ upside down L 或者 f[i - 1][2]中插入 horizontal I
f[i][1] = (f[i - 1][2] + f[i - 1][0]) % mod;
f[i][2] = (f[i - 1][1] + f[i - 1][0]) % mod; // f[i - 1][0]+ L 或者 f[i - 1][1]中插入 horizontal I
// f[i - 1][0] + horizontal 2X I, f[i - 1][3] + I, f[i - 1][1]+ L
f[i][3] = ((f[i - 1][0] + f[i - 1][1]) % mod + (f[i - 1][2] + f[i - 1][3]) % mod) % mod;
}
/*
for (int i = 1; i <= n ; i ++ ){
printf("%d,", f[i ][0]);
printf("%d,", f[i ][1]);
printf("%d,", f[i ][2]);
printf("%d\n", f[i ][3]);
}*/
printf("%d\n", f[n ][3]);
return 0;
}