题目描述
有1×n的一个长方形,用一个1×1、1×2和1×3的骨牌铺满方格。例如当n=3时为1×3的方格。此时用1×1、1×2和1×3的骨牌铺满方格,共有四种铺法。如图所示。
输入
输入n(n为自然数,并且1≤n≤30)
输出
输出骨牌铺法的方案数。
样例输入 Copy
3
样例输出 Copy
4
思路:设1*n时有F(n)种排法;
F(1)有1种;F(2)有2种;F(3)有4种;
n为4的时候,方法数F4的分析如下:
第一块放11,有一种方法;剩余3块方法数是F3=4种。根据乘法原理,该种情况的方法数是14=4。
第一块放12,有一种方法;剩余2块方法数是F2=2种。根据乘法原理,该种情况的方法数是12=2.
第一块放13,有一种方法;剩余1块方法数是F1=1种。该种情况方法数是11=1.
根据分类原理,F4=4+2+1=7种。
……
故n>=4的时候,Fn=Fn-1+Fn-2+Fn-3
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
int cnt[50]={0,1,2,4};
for(int i=4;i<=n;i++){
cnt[i]=cnt[i-1]+cnt[i-2]+cnt[i-3];
}
cout << cnt[n] << endl;
return 0;
}
#include<iostream>//慢
#include<bits/stdc++.h>
using namespace std;
int bone(int n){
if(n==1) return 1;
if(n==2) return 2;
if(n==3) return 4;
else return bone(n-1)+bone(n-2)+bone(n-3);
}
int main(){
int n;
cin >> n;
cout << bone(n) << endl;
return 0;
}