HDU2046 骨牌铺方格 简单的递推问题
Problem Description
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.
例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:
Input
输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。
Output
对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。
Sample Input
1
3
2
Sample Output
1
3
2
思路
当N=1时,只能竖着放一块,只有这1种方案,F(1)=1
当N=2时,可以竖着放两块也可以横着放两块,有2种方案,F(2)=2
当N=3时,若在最左侧竖着放一块,则方案数为F(2);若在最左侧横着放两块,则方案数为F(1)
当N=4时,若在最左侧竖着放一块,则方案数为F(3);若在最左侧横着放两块,则方案数为F(2)
以此类推,当N > 2时,F(N)=F(N - 1)+F(N - 2)
代码
#include <stdio.h>
int main(){
long long int a[51] = {0,1,2};
int n;
for(int i = 3;i <= 50;i++)
a[i] = a[i-1]+a[i-2];
while(scanf("%d",&n)!=EOF)
printf("%lld\n",a[n]);
return 0;
}