题目:在一个2*n的地面上铺1*2的砖块,问能铺几块。
分析:dp。因为长度为2,所以至于最近2层相关;每次铺砖要么横放,要么竖放,两种加和结果
状态转移方程 f(n) = f(n-1)+ f(n-2) 和Fib数列相同的公式(⊙_⊙)
说明:想起多年前做的m*n的状态压缩铺砖问题了。
#include <iostream>
#include <cstdlib>
using namespace std;
int F[55];
int main()
{
F[0] = F[1] = 1;
for ( int i = 2 ; i < 51 ; ++ i )
F[i] = F[i-1] + F[i-2];
int n;
while ( cin >> n && n )
cout << F[n] << endl;
return 0;
}