藍橋杯 格仔刷油漆(dp)

2021-06-20 23:06:26 字數 1300 閱讀 7138

歷屆試題格仔刷油漆

時間限制:

1.0s 

記憶體限制:

256.0mb

問題描述 x

國的一段古城牆的頂端可以看成

2*n個格仔組成的矩形(如下圖所示),現需要把這些格仔刷上保護漆。

你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔(對角相鄰也算數),但不能移動到較遠的格仔(因為油漆未乾不能踩!)

比如:ad b c e f

就是合格的刷漆順序。

ce f d a b

是另一種合適的方案。

當已知n

時,求總的方案數。當

n較大時,結果會迅速增大,請把結果對

1000000007(

十億零七

)取模。

輸入格式

輸入資料為乙個正整數(不大於

1000

)輸出格式

輸出資料為乙個正整數。

樣例輸入 2

樣例輸出 24

樣例輸入 3

樣例輸出 96

樣例輸入 22

樣例輸出

思路:較麻煩的dp,要考慮好多情況, 看了一位大神的**才明白。

//格仔刷油漆

#include #define max_num 1000000007

__int64 a[1001] = , b[1001] = ; //a為從角落的乙個格仔開始刷的總可能數, b為從角落的乙個格仔開始刷最終回到起始格仔的正下方

int main()

a[1] = 1; //初始化一下a[1],a[2], 因為遞推時要用到(至於a[1,2]怎樣得到的,自己數吧)

a[2] = 6;

for(i = 3; i <= n; i++) //a[i]可以由三部分得來,1,i=1時先走起點下方的格仔然後的落點有兩種(後面就和a[i]一樣了)。2,最終回到起點正下方(即b[i])。3,由i-2列輾轉的來(如圖)

sum = 4 * a[n]; //sum是四個角為起點的情況和中間為起點的情況之和

for(i = 2; i <= n-1; i++) //中間為起點

printf("%i64d\n", sum);

return 0;

}

格仔刷油漆(DP)

格仔刷油漆 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖1所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a ...

格仔刷油漆(dp)

格仔刷油漆 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如圖1所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比如 a d b c e f 就是合格的刷漆順序。c e f d a ...

藍橋杯 歷屆試題 格仔刷油漆

歷屆試題 格仔刷油漆 時間限制 1.0s 記憶體限制 256.0mb 問題描述 x國的一段古城牆的頂端可以看成 2 n個格仔組成的矩形 如下圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比...