题目大意: 输入长方形方格的长。输出铺满长方形方格共有多少种铺法。。。
解题思路:
1、从图中也可以观察出来,第N张牌的排列可以又N-1张牌的排列再在末尾加上一张竖的牌。这样依然合法。
也可以在N-2张合法排列的牌后面加上两张横着放的牌(如果竖着放就和上面一种重复了)。
所以f(n) = f(n-1) + f(n-2)
即又是一个斐波那契数列。
注意:我是打表做的,竟然要用到__int64 。没用这个AC不了。
2、摆放第n块的时候,第n-1块可以不动,直接方上第n块,也可以将第n-1块横过来,这样也可以放入第n块。
递推公式为:f(n)=f(n-1)+f(n-2).
算法:N个前面有二种做法,1.前面做好了N-1个,则再加一个格子只有一种做法,(N-1)*1
2.前面N-2个已经排好,再加二个格子,只有一种做法(横排,若是竖排则与第一种做法相同),(N-1)*1
加法原理f(n)=f(n-1)+f(n-2)
代码如下:
/*
* 2046_1.cpp
*
* Created on: 2013年8月12日
* Author: Administrator
*/ 我喜欢章泽天。。。。。。
#include <stdio.h>
#include <string.h>
int main(){
__int64 fib[51];
memset(fib,0,sizeof(fib));
fib[1] = 1;
fib[2] = 2;
int i ;
for( i = 3 ; i <= 50 ; ++i){
fib[i] = fib[i-1] + fib[i-2];
}
int n;
while(scanf("%d",&n)!=EOF){
printf("%I64d\n",fib[n]);
}
}