杭電oj 2045

有排成一行的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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章