题目:
有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.输入方格数 n,求全部的满足要求的涂法 F[n].
思路:
同样是个递推问题,不是太好想,这里模拟一下:
可见,当 n > 3 时,F(n) 由 F(n-1) 和 F(n-2) 决定,分为两类:① n-1 与 1 同色,n有两种选择,n-1 有一种选择 ② n-1 与 1 不同色,n有 1 种选择,F(n-1) 直接代入就好
实现:
/'这里需要注意 n = 3 时不符合规律'/
int main() {
LL n, a[55]={0,3,6,6}; //注意 a[3]
for(int i = 4; i <= 50; i++)
a[i] = 2 * a[i - 2] + a[i - 1];
while(cin >> n) cout << a[n] << endl;
return 0;
}