渣渣辉有个儿子叫小辉辉,他非常喜欢数论。
有一天,小辉辉在玩积木时,对渣渣辉提出了一个问题:
在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
解法:其实这就是一个斐波那契数列式的问题,可以用递推法,但是数据处理过于复杂,我们可以用动态数组去处理,就是记忆化搜索的方式。为了避免超出int型范围,我们用long long去定义n,
#include<iostream>
#include<cstdio>
using namespace std;
const int maxn = 55;
long long int f[maxn];
long long int find(int n){
if(f[n] != 0) return f[n];
return f[n] = find(n - 1) + find(n - 2);
}
int main()
{
int n;
fill(f,f + maxn, 0);
f[1] = 1;
f[2] = 2;
while(scanf("%d",&n) != EOF){
printf("%lld\n",find(n));
}
return 0;
}