HDU_oj_2045 不容易系列之RPG問題
阿新 • • 發佈:2017-12-11
www. href ace lan 研究 () pro -a spa
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
Problem Description
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,
要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
Input
輸入數據包含多個測試實例,每個測試實例占一行,由一個整數N組成,(0<n<=50)。
Output
對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出占一行。
Sample Input
1 2
Sample Output
3
6
分析:
又是典型的遞歸問題:
最後一個格子的塗色除了不能和第一個格子一樣,它還受到第n-1個格子的制約,
有以下兩種情況:
①第n-1個格子和第一個格子顏色一樣,則最後一個格子有兩種選擇,
而第n-2個格子由於不會和第n-1個格子顏色一樣,所以這種情況下,總共有2*F(n-2)種情況
②第n-1個格子和第一個格子顏色不一樣,則最後一個格子只能有一種選擇,
而第n-1個格子的顏色滿足要求,所以這種情況下,總共有F(n-1)種情況
所以綜上所述,總的塗法為:F(n)=F(n-1)+2*F(n-2) (n>=4)
遞歸問題可查看鏈接:http://www.cnblogs.com/tenjl-exv/p/8016577.html
註意點:
後面數據可能有點大,最好用64bit存儲
1 //遞歸解法,但不是遞歸寫法2 //遞歸寫起來可能會超時 3 #include<iostream> 4 using namespace std; 5 6 int main() 7 { 8 int n; 9 long long fx,fy,fz; 10 while(cin>>n) 11 { 12 fx=6;fy=6;fz=0; 13 if(n==1) 14 cout<<"3"<<endl; 15 else if(n==2) 16 cout<<fx<<endl;17 else if(n==3) 18 cout<<fy<<endl; 19 else 20 { 21 n-=3; 22 while(n--) 23 { 24 fz=fy+2*fx; 25 fx=fy; 26 fy=fz; 27 } 28 cout<<fz<<endl; 29 } 30 } 31 }
Problem Description 人稱“AC女之殺手”的超級偶像LELE最近忽然玩起了深沈,這可急壞了眾多“Cole”(LELE的粉絲,即"可樂"),經過多方打探,某資深Cole終於知道了原因,原來,LELE最近研究起了著名的RPG難題:
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
Input 輸入數據包含多個測試實例,每個測試實例占一行,由一個整數N組成,(0<n<=50)。
Output 對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出占一行。
Sample Input 1 2
Sample Output 3 6
HDU_oj_2045 不容易系列之RPG問題