歷屆試題格仔刷油漆
時間限制:
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個格仔組成的矩形 如下圖所示 現需要把這些格仔刷上保護漆。你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔 對角相鄰也算數 但不能移動到較遠的格仔 因為油漆未乾不能踩!比...