有一个1×n的长方形,由边长为1的n个方格构成,例如,当n=3时为1×3的方格长方形如下图所示。求用1×1、1×2、1×3的骨牌铺满方格的方案总数。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个整数n(1≤n≤50)。
输出格式:
对于每组测试,输出一行,包含一个整数,表示用骨牌铺满方格的方案总数。
输入样例:
3
输出样例:
4
#include<iostream>
using namespace std;
int main()
{
long long n,ans[52];
ans[1]=1;
ans[2]=2;
ans[3]=4;
for(int i=4;i<=50;i++){
ans[i] = ans[i-1]+ans[i-2]+ans[i-3];
}
while(cin>>n){
cout<<ans[n]<<endl;
}
}
简单递推,当新增一个地砖的时候,我们可以选择最后一块地砖的长度有三种情况,就是长度分别为1,2,3,那么就可以找到递推规律ans[i] = ans[i-1]+ans[i-2]+ans[i-3];