CF1369D 题解
思路
不难发现,对于一个 的树而言,左右儿子是 的,中间儿子是 的,这里就放一个 的图(手绘,不喜勿喷 qwq):

然后每隔三层,就会在根节点形成一个与子树的爪不重合的爪,所以状态转移方程如下:
另外注意一个爪子有四个点。
代码
# include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair <int, int> pii;
const int mod = 1e9 + 7;
int n = 2000003, t, dp[2000005];
int main () {
ios::sync_with_stdio (0);
cin.tie (0);
cout.tie (0);
for (int i = 3; i < n; ++ i)
dp[i] = (dp[i - 1] + dp[i - 2] * 2 % mod + (! (i % 3)) * 4) % mod;
cin >> t;
while (t --)
cin >> n, cout << dp[n] << '\n';
return 0;
}

浙公网安备 33010602011771号