链接
Tiling_easy version - http://acm.hdu.edu.cn/showproblem.php?pid=2501
分析
- 整体转换图
- 局部转换图:(循环节 -> 递推节)此图中,
- n-2的 “出” 是完整的
- n的 “入” 是完整的
- n-1的“出”与“入”都是不完整的
- 但三者的关系是完整的
-
递推方程:F(n) = F(n-1) + 2*F(n-2)
-
F(n-1) = F(n-1)
-
递推矩阵 :
( F n F n − 1 ) = ( 1 2 1 0 ) × ( F n − 1 F n − 2 ) = ( 1 2 1 0 ) n − 2 × ( F 2 F 1 ) = ( 1 2 1 0 ) n − 2 × ( 3 1 ) \begin{pmatrix} F_n \\ F_{n-1} \\ \end{pmatrix} = \begin{pmatrix} 1 & 2 \\ 1 & 0 \\ \end{pmatrix} \times \begin{pmatrix} F_{n-1} \\ F_{n-2} \\ \end{pmatrix} = { \begin{pmatrix} 1 & 2 \\ 1 & 0 \\ \end{pmatrix} }^{n-2} \times \begin{pmatrix} F_2 \\ F_1 \\ \end{pmatrix} = { \begin{pmatrix} 1 & 2 \\ 1 & 0 \\ \end{pmatrix} }^{n-2} \times \begin{pmatrix} 3 \\ 1 \\ \end{pmatrix} (FnFn−1)=(1120)×(Fn−1Fn−2)=(1120)n−2×(F2F1)=(1120)n−2×(31)
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll ans[35];
int t;
int main(){
ans[1]=1;
ans[2]=3;
for(int i=3;i<=30;i++) {
ans[i]=ans[i-1]+2*ans[i-2];
}
scanf("%d",&t);
while(t--) {
int a;
scanf("%d",&a);
printf("%lld\n",ans[a]);
}
return 0;
}