題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2045
題目要求:
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色涂每個格子,每格涂一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的涂法.

image.png
做題思路:
假設紅粉綠分別為:1,2,3
有2種情況:
1.在n - 1的合法的方案后加一個數(shù),該數(shù)必定唯一,由于方案的首尾數(shù)字不同,因此第n個方格的數(shù)字必定是這兩個數(shù)字之外的一種,即方案數(shù)為f(n-1)個
在n - 1的不合法方案(首尾數(shù)字相同的情況),由于方案的首尾數(shù)字相同,因此第n個方格的數(shù)字可以有兩種可能,即方案數(shù)為2f(n-2)個
得出公式:f(n) = f(n-1) +2f(n-2)
如圖:虛線框代表不合法方案。

image.png
代碼:
#include "stdio.h"
int main () {
long long a[51];
int i,n;
while (scanf("%lld",&n)!=EOF) {
a[1] = 3;
a[2] = 6;
a[3] = 6;
for (i = 4;i <= n;i++) {
a[i]=a[i-1]+2*a[i-2];
}
printf("%lld\n",a[n]);
}
}