hdu-2045 简单递推 水

题意:

  一行长度为n的方格,只能使用三种颜色R、P、G来填充,且满足相邻方块不能同色,首尾方块不能同色。给出n,输出满足条件的着色方案数。

思路:

  简单递推,由n-1个方块推导出n个方块的情况,有以下两种情况:

    1.第n-1个方块与第1个方块不同色,满足条件。直接在n-1的满足基础上添加第n个,且第

n个只有一种选择。即F[n-1];

    2.第n-1个方块与第1个方块同色,不满足F[n-1],退至F[n-2],此时添加第n个方块时有两种选择。即F[n-2]*2。

  递推公式:F[n] = F[n-1] + 2 * F[n-2]

代码:

 1 #include<iostream>
 2 using namespace std;
 3 int main()
 4 {
 5     int n;
 6     long long f[55];
 7     f[1] = 3;
 8     f[2] = 6;
 9     f[3] = 6;    //注意f[3]不能用递推公式得出
10     for(int i = 4; i < 51; i++)
11     {
12         f[i] = f[i - 1] + 2 * f[i - 2];
13     }
14     while(cin >> n)
15     {
16         cout << f[n] << endl;
17     }
18     return 0;
19 }

 

posted @ 2018-09-22 23:45  Piccolo_Devil  阅读(134)  评论(0编辑  收藏  举报