一、D - 不容易系列之(3)―― LELE的RPG難題

D - 不容易系列之(3)―― LELE的RPG難題

HDU - 2045

人稱“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個格子的塗法爲a[n]

(1)如果第n-1個格子與第一個格子顏色不同,那麼第n個格子只有一種塗法,也就是說塗不塗第n個對結果沒有影響,即a[n]=a[n-1];

(2)如果第n-1個格子與第一個格子顏色相同,那麼第n個格子就有兩種塗法,且種類與第n-2個格子相同,即a[n]=a[n-2]*2;

綜上:a[n]=a[n-1]+a[n-2]+2;

#include <stdio.h>
#include <stdlib.h>

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

 

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