这一题竟然是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; }