递推求解专题练习(For Beginner)[3]&HDU2046


如图:

对于给定的2*n格方块,可以由摆放好的2*(n-1)的方块加上一块竖直的2*1方块或者由摆放好的2*(n-2)的方块加上两块横着的2*1方块组合而来。
容易得出状态转移方程为著名的斐波那契数列:

f[n] = f[n-1] + f[n-2],

边界条件

f[1] = 1,f[2] = 2;

代码如下:


/*
ID:Shuaicpp
Prog:HDU2046-骨牌铺方格
Lang:C++
Algorithm:DP-f[i]=f[i-1]+f[i-2];
*/
#include <iostream>
using namespace std;
const int n = 51;
long long f[n] = {0};
int main()
{
   f[1] = 1;
   f[2] = 2;
   f[3] = 3;
   for (int i = 4;i < n;i++)
       f[i] = f[i-1] + f[i-2];
   int x;
   while (cin >> x)
       cout << f[x] << endl;
   return 0;
}

, ,

  1. #1 by xpycc on 2009年08月25日 - 7:00 下午

    N 较大的话还是用矩阵把……

(will not be published)