有排成一行的n个方格,用红(Red)、粉(Pink)、绿(Green)三色涂每个格子,每格涂一色,要求任何相邻的方格不能同色,且首尾两格也不同色.求全部的满足要求的涂法.
思路:运用递归算法。
a[1]=3,a[2]=6,a[3]=6
分两种情况讨论:
第一种:第(n-1)个格子与第一个格子不同色,那么涂(n-1)个格子共有a[n-1]种方法,由于(n-1)格子与第一个格子不同色,最后一格子只有一种颜色可涂。
第二种:第(n-1)个格子与第一个格子同色,前面的(n-2)个格子共有a[n-2]种凃法,加上的(n-1)个格子由于与第一个格子同色,所以不会与(n-2)个格子 颜色相同,此时最后一个格子有两种凃法,所有共有2*a[n-2]方法。
总和:a[n]=a[n-1]+2*a[n-2]
1 #include <iostream> 2 using namespace std; 3 int main() 4 { 5 long long a[100]; 6 a[1] = 3; 7 a[2] = 6; 8 a[3] = 6; 9 int n; 10 while (cin>>n) 11 { 12 for (int i=4; i <= n; i++) 13 { 14 a[i] = a[i - 1] + 2 * a[i - 2]; 15 } 16 cout << a[n] << endl; 17 } 18 }