不容易系列之(3)—— LELE的RPG難題(遞推)
阿新 • • 發佈:2019-05-03
有一種 str def 相同 -a 求解 sin clas align Problem Description
人稱“AC女之殺手”的超級偶像LELE最近忽然玩起了深沈,這可急壞了眾多“Cole”(LELE的粉絲,即"可樂"),經過多方打探,某資深Cole終於知道了原因,原來,LELE最近研究起了著名的RPG難題:
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
有排成一行的n個方格,用紅(Red)、粉(Pink)、綠(Green)三色塗每個格子,每格塗一色,要求任何相鄰的方格不能同色,且首尾兩格也不同色.求全部的滿足要求的塗法.
以上就是著名的RPG難題.
如果你是Cole,我想你一定會想盡辦法幫助LELE解決這個問題的;如果不是,看在眾多漂亮的痛不欲生的Cole女的面子上,你也不會袖手旁觀吧?
Input 輸入數據包含多個測試實例,每個測試實例占一行,由一個整數N組成,(0<n<=50)。
Output 對於每個測試實例,請輸出全部的滿足要求的塗法,每個實例的輸出占一行。
Sample Input 1 2
Sample Output 3 6 一開始我按高中數學的思維,每個方格可能有幾種情況,相乘,這個題目不是要求相鄰及首尾元素不能相同嗎,用總共可能的情況減去首尾相同的情況不就行了嗎。但是,這樣太麻煩了,我沒做出來,給你5個方格這樣還行,如果給你幾十個方格,自己算夠算一陣了,這時你想要計算機幫忙,但是,你要找出規律啊,再讓計算機幫你求解。 思維要轉變,高中做的題範圍往往都很小,現在要靠計算機幫助,就需要告訴它怎麽做。 思路:在n-1個方格後面放一個格構成n個方格。這時我們可以考慮固定第n-1個格,第n-1個格有兩種情況,與第一個格相同色,或不同色。 相同色時:第n個格有兩種情況,所以總情況為2*f[n-2]; 不同色時:第n個格只有一種情況,所以還是原來的情況,即f[n-1]; 綜上: f[n]=f[n-1]+2*f[n-2];//這就是告訴計算機的規律 AC Code
1 #include<iostream> 2 #include<iomanip> 3 //#include<bits/stdc++.h> 4 #include<cstdio> 5 #include<cmath> 6 #include<cstring> 7 #include<algorithm> 8 #include<sstream> 9 #define PI 3.14159265358979 10 #define LL long long 11 #defineView Codeeps 0.00000001 12 using namespace std; 13 LL f[100]; 14 LL solve(LL x) 15 { 16 if(f[x]) return f[x]; 17 for(int i=4;i<=x;++i) 18 { 19 f[i]=f[i-1]+2*f[i-2]; 20 } 21 return f[x]; 22 } 23 int main() 24 { 25 LL T;f[1]=3,f[2]=6,f[3]=6; 26 while(cin>>T) 27 { 28 if(T==1) cout<<3<<endl; 29 else if(T==2) cout<<6<<endl; 30 else if(T==3) cout<<6<<endl; 31 else cout<<solve(T)<<endl; 32 } 33 }
不容易系列之(3)—— LELE的RPG難題(遞推)