这一题竟然是Fibonacci数列,纠结啊。。。。很弱啊!!!木有看出来。。。
假如铺完除最后一个有f(n-1)种方法,则共有1*f(n-1)中,假如铺完还剩最后两个有f(n-2)这最后两个只有一种,如果竖着铺,就和第一个一样所以只能横着铺,即f(n)=f(n-1)+f(n-2)
Ac代码:
#include<iostream>
using namespace std;
long long f[51];
int n;
int main()
{ f[0]=1;
f[1]=1;
f[2]=2;
f[3]=3;
for(long long i=4;i<51;++i)
f[i]=f[i-1]+f[i-2];
while(cin>>n)
cout<<f[n]<<endl;
return 0;
}