HDUoj 2045 不容易系列之(3)—— LELE的RPG難題

發篇塵封在電腦裏的我的小筆記

不容易系列之(3)—— LELERPG難題

Time Limit:2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K(Java/Others)

TotalSubmission(s): 58515    Accepted Submission(s): 23449

 

 

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

 

 

 

       首先想了很久,然後被自己蠢到了。

       假設有n個格子。

這個問題先要將n=1,n=2,n=3三種情況推一遍。然後考慮n=4時的情況。我們知道n=3時,由於最後一個格子不能與第一個相同,所以n=4如果用的是n=3的結果只有一種顏色可以填進去。

也就是f(n-1)個方法。

由於我們現在做的是n=4的情況,所以我們可以在第三個格子填入與第一個格子相同的顏色,我們也就可以在最後一個填入另外兩個隨意的顏色。

也就是2*f(n-2)個方法。

遞歸函數: f(n) = f(n-1) + 2*f(n-2)

 

下面呈上小弟AC的代碼:

 

#include<iostream>
#include<cstdio>

using namespacestd;
long long arr[100];
int main()
{
    arr[1] = 3;
    arr[2] = 6;
    arr[3] = 6;
    for(int i = 4; i < 100; i++)
        arr[i] = arr[i-1] + 2*arr[i-2];
    int n;
    while(scanf("%d", &n) != EOF)
        printf("%lld\n", arr[n]);
    return 0;
}


發佈了39 篇原創文章 · 獲贊 14 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章