题目:
思路:
写的时候自我感觉良好,,0分后反思才发现思路是错的
有个很牛的思路:视频
1列为整体时,1种摆法
2列为整体时,1种摆法
3列为整体时,2种摆法
4列为整体时,2种摆法
5列为整体时,2种摆法
发现f[1]=1,f[2]=2,f[3]=5,f[4]=11
f(n)=f(n-1)+f(n-2)+f(n-3)*2+f(n-4)*2+f(n-5)*2+........(乘2是因为余下的空间有2种摆法)
得到:f(n)=2*f(n-1)+f(n-3)
代码:
#include<iostream>
using namespace std;
int n;
const long long mod=1000000007;
long long f[10000005];
int main(){
cin>>n;
f[1]=1;
f[2]=2;
f[3]=5;
for(int i=4;i<=n;i++){
f[i]=(2*f[i-1]+f[i-3])%mod;
}
cout<<f[n];
return 0;
}