題目大意
給定一排長度爲N(0<N<40)的方格,向裏面填入a,b,c三個數。要求僅數字C不能相鄰。問:N個格子有幾種填數方法
思路
當只有一個格子的時候就三種方法即F(1) = 3
當有兩個格子的時候:F(2) = 8,這個答案固然可以通過列舉得到,但怎麼通過上一個狀態去得到本狀態呢?
分析
每一個狀態無非是通過上一個狀態的其中一種情況得來的。無非是最後一個數字是C與否
N | 1 | 2 | 3 | 4 |
---|---|---|---|---|
末尾爲C : F1(N) | 1 | 2 | 6 | 16 |
不爲C : F2(N) | 2 | 6 | 16 | 44 |
總數 | 3 | 8 | 22 | 60 |
很容易想出來:我們設F(N)爲長度爲N的時候的方法數,F1(N)爲長度爲N時,末尾爲C的方法數,F2(N)不爲C的方法數顯然F(N) = F1(N) + F2(N)
更顯然的是F1(N) = F2(N-1),F2(N) = 2F(N-1) 以上三個式子合併即可得到終極遞推表達式:F(N) = 2F(N-1) + 2F(N-2)
代碼套路都一樣我就不放了,自己可以再好好想想那兩個式子是怎麼得到的