1. 程式人生 > >hdu-2045 簡單遞推 水

hdu-2045 簡單遞推 水

方塊 span col 方案 ace std name hdu return

題意:

  一行長度為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 }

hdu-2045 簡單遞推 水