题目大意
原题链接:HDOJ 2046 骨牌铺方格
解题思路
f(1)=1; (竖着的2*1)
f(2)=2; (两个竖着的2*1;两个横着的2*1)
:
f(n)=f(n-1)+f(n-2); (总共有两种情况,如果新增的一列固定为竖着的2*1,则有f(n-1)种铺放方案;如果新增的一列要铺放横着的2*1,最后两列的铺放就固定了,那么就有f(n-2)种铺放方案。
代码实现
#include<bits/stdc++.h>
using namespace std;
int main()
{
long long f[55];
f[1]=1;f[2]=2;
for(int i=3;i<=51;i++)
f[i]=f[i-1]+f[i-2];
int n;
while(cin>>n){
cout<<f[n]<<endl;
}
return 0;
}
bug
Wrong Answer 数组的数据类型报int
Time Limit Exceeded 因为输入数据有多组,所以应该先将所有规格的铺放方案总数放在数组里整理好,直接输出想要规格的铺放方案总数(若用递推则每组数据都要从尾到头递推一遍,造成超时)