HDU 2501 Tiling_easy version

链接

Tiling_easy version - http://acm.hdu.edu.cn/showproblem.php?pid=2501

分析

  • 整体转换图
1
2
1
1
2
2
1
1
2
2
1
*
2
0
1
2
3
4
5
6
*
  • 局部转换图:(循环节 -> 递推节)此图中,
    • n-2的 “出” 是完整的
    • n的 “入” 是完整的
    • n-1的“出”与“入”都是不完整的
    • 但三者的关系是完整的
1
2
1
n-2
n-1
n
  • 递推方程: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} (FnFn1)=(1120)×(Fn1Fn2)=(1120)n2×(F2F1)=(1120)n2×(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;
 }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jpphy0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值