有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在衆多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
Input
輸入數據包含多個測試實例,每個測試實例佔一行,由一個整數N組成,(0<n<=50)。
Output
對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出佔一行。
Sample Input
1 2
Sample Output
3 6
/*思路:
n個格子合乎題目要求的塗色時(即稱之爲合法)對應一個映射f? 使f(n)即爲所求值。那麼接下來分析,當塗
第n個格子的時候,即要求f(n)時,受到第n-1個格子是否與第一個格子相同的制約。那麼接下來的問題是對第
n-1個格子分兩種情況:假定其和第一個格子不同顏色,那麼也就是說前n-1個格子是合法的塗法可以寫爲f(n-1),
再塗最後一個格子只有一種塗法。第二種第n-1個格子和第一個相同,那麼前n-1不合法,且此時第n-2個格子一定和
第一個不同,那麼此時前n-2個格子必定又是合法的,且第n個格子2種塗法。那麼對f(n)的貢獻爲f(n-2)*2,那麼
f(n)來源於前兩種情況的和,由加法原理。f(n)=f(n-1)+f(n-2)*2;n》=4;
AC:
*/
/*思路:
n個格子合乎題目要求的塗色時(即稱之爲合法)對應一個映射f? 使f(n)即爲所求值。那麼接下來分析,當塗
第n個格子的時候,即要求f(n)時,受到第n-1個格子是否與第一個格子相同的制約。那麼接下來的問題是對第
n-1個格子分兩種情況:假定其和第一個格子不同顏色,那麼也就是說前n-1個格子是合法的塗法可以寫爲f(n-1),
再塗最後一個格子只有一種塗法。第二種第n-1個格子和第一個相同,那麼前n-1不合法,且此時第n-2個格子一定和
第一個不同,那麼此時前n-2個格子必定又是合法的,且第n個格子2種塗法。那麼對f(n)的貢獻爲f(n-2)*2,那麼
f(n)來源於前兩種情況的和,由加法原理。f(n)=f(n-1)+f(n-2)*2;n》=4;
AC:
*/
#include<iostream>
using namespace std;
int main()
{
int m;
double ls[51]={3,6,6};
for(int i=3;i<=50;i++)
ls[i]=ls[i-1]+ls[i-2]*2;
while(cin>>m)
printf("%.0lf\n",ls[m-1]);
return 0;
}