题目描述
用一个1*3的骨牌去覆盖一个3*n的长方形,求所有可能的方案数,n的范围(n的范围 1<=n<=20000)方案数请输出对1000000007取模的结果
输入
n
40% 数据 n<=20
80% 数据 n<=100
100%的数据 n<=20000
输出
所有可能方案数 对1000000007取模的结果
样例输入复制
3
样例输出复制
2
自上向下递归:
找规律可知f(n)=f(n-1)+f(n-3)
#include<bits/stdc++.h>
using namespace std;
int F[20000]={0,1,1,2};
int f(int n){
if(n==1&&n==2)return 1;
if(n==3)return 2;
if(F[n]!=0)
return F[n]%1000000007;
F[n]=(f(n-3)+f(n-1))%1000000007;
return F[n];
}
int main(){
int n;
cin>>n;
cout<<f(n);
}
自下向上循环:
#include<bits/stdc++.h>
using namespace std;
int F[20000]={0,1,1,2};
int main(){
int n;
cin>>n;
for(int i=4;i<=n;i++)
F[i]=F[i-1]+F[i-3];
cout<<F[n];
}