藍橋杯 城牆刷漆(未完)

2021-08-17 20:09:50 字數 1524 閱讀 7439

x國的一段古城牆的頂端可以看成 2*n個格仔組成的矩形(如圖所示)

現需要把這些格仔刷上保護漆。

你可以從任意乙個格仔刷起,刷完一格,可以移動到和它相鄰的格仔(對角相鄰也算數),

但不能移動到較遠的格仔(因為油漆未乾不能踩!)

比如:a d b c e f 就是合格的刷漆順序。

c e f d a b 是另一種合適的方案。

當已知 n 時,求總的方案數。當n較大時,結果會迅速增大,請把結果對 1000000007取模。

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

輸出資料為乙個正整數。

例如:使用者輸入:

2程式應該輸出:

24再例如:

使用者輸入:

3程式應該輸出:

96再例如:

使用者輸入:

22程式應該輸出:

359635897

錦囊:fb(n) 從邊緣某格開始,到與它相鄰的另乙個邊緣格仔結束

fb(n) = fb(n-1) * 2

fa(n) 從某個邊緣格仔開始的所有情況

fa(n) = fb(n) + 2*fa(n-1) + 4 * fa(n-2)

最後走相鄰邊緣格 第1步走相鄰邊緣格 第2步走相鄰邊緣格

fk(i,n) 一共有n個格仔,從中間的第i個格仔為起點,任意結束

fk(i,n) = ( fb(i)*fa(n-i)*2 + fb(n-i+1)*fa(i-1)*2 ) * 2

先走左邊再右邊 先走右邊再左邊 有兩個可能起點

總情況包含:

從某個邊緣格開始的所有情況 4 * fa(i)

從中間某個格仔開始的所有情況 i從2到n-1求和:fk(i,n)

因為我看到上面的方法比較難懂,我就直接用暴力的方法了

結果當n為10時得到答案已經比較慢了

而且因為當n較大時,我這個方法是算不出的(可能是超時或溢位),所以就沒有取模那一步。

解:

public class main 

if (x + 1 < 2 && a[x + 1][y] == 0)

if (x - 1 >= 0 && a[x - 1][y] == 0)

if (y + 1 < n && a[x][y + 1] == 0)

if (y - 1 >= 0 && a[x][y - 1] == 0)

if (x + 1 < 2 && y + 1 < n && a[x + 1][y + 1] == 0)

if (x - 1 >= 0 && y - 1 >= 0 && a[x - 1][y - 1] == 0)

if (x + 1 < 2 && y - 1 >= 0 && a[x + 1][y - 1] == 0)

if (x - 1 >= 0 && y + 1 < n && a[x - 1][y + 1] == 0)

} public static void main(string args)

system.out.println(sum);

}}

到時有時間再把正確的做法補上。

藍橋杯 蘭頓螞蟻 未完成解

直接模擬蘭頓螞蟻的行動,按照規則改變 中出了乙個bug,正在找到底是 的問題 也許不會去找 未完成 題目描述 蘭頓螞蟻 landun 輸入格式 輸入資料的第一行是 m n 兩個整數 3 m,n 100 表示正方形格仔的行數和列數。接下來是 m 行資料。每行資料為 n 個被空格分開的數字。0 表示白格...

藍橋杯 歷屆試題 剪格仔(未完成)

歷屆試題 剪格仔 時間限制 1.0s 記憶體限制 256.0mb 問題描述 如下圖所示,3 x 3 的格仔中填寫了一些整數。10 1 52 20 30 1 1 2 3 我們沿著圖中的星號線剪開,得到兩個部分,每個部分的數字和都是60。本題的要求就是請你程式設計判定 對給定的m x n 的格仔中的整數...

藍橋杯入門訓練 藍橋杯備賽

begin 1 a b問題str1 input str2 str1.split s int str2 0 int str2 1 print s begin 2 序列求和s int input 用公式計算而不用迴圈,避免超時 n s s 1 2print int n begin 3 圓的面積impor...