您的位置:首页 > 其它

HDU 2501 Tiling_easy version

2014-07-23 15:27 295 查看


简单递推



Tiling_easy version

Problem Description

有一个大小是 2 x n 的网格,现在需要用2种规格的骨牌铺满,骨牌规格分别是 2 x 1 和 2 x 2,请计算一共有多少种铺设的方法。

Input

输入的第一行包含一个正整数T(T<=20),表示一共有 T组数据,接着是T行数据,每行包含一个正整数N(N<=30),表示网格的大小是2行N列。

Output

输出一共有多少种铺设的方法,每组数据的输出占一行。

Sample Input

3
2
8
12


Sample Output

3
171
2731




a
= a[n-1] + 2 * a[n-2]
我的想法[思路上先处理1个2*1或者2*2的,因为有这两种格子]:

先放2*1(竖着):a[n-1];(横着):a[n-2] 【剩下n-2列,所以是a[n-2]】

先放2*2:a[n-2]

别人想法[思路上先放其他的]:

1.这个格竖着放一个2*1的骨牌,这种情况和data[i-1] 数量相同

2.这个新增加和格和它前面那个格合起来放一个2*2的骨牌,这种情况和data[i-2]的数量相同

3.这个新增加的格和它前面那个格合起来横着放两个2*1的骨牌,这种情况和data[i=2]数量
也相同

include<stdio.h>
int main()
{
int n,i,t;
int a[32]={1,1,3};
for(i=3;i<=31;i++)
a[i]=a[i-1]+2*a[i-2];
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
printf("%d\n",a
);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: