1. 程式人生 > >【LibreOJ6003】【網路流24題】魔術球問題 的通項公式與線性解法

【LibreOJ6003】【網路流24題】魔術球問題 的通項公式與線性解法

假設有 n 根柱子,現要按下述規則在這n 根柱子中依次放入編號為1,2,3,4,⋯的球。

  1. 每次只能在某根柱子的最上面放球。
  2. 在同一根柱子中,任何 2 個相鄰球的編號之和為完全平方數。

試設計一個演算法,計算出在 n 根柱子上最多能放多少個球。

這道題有貪心做法,由於答案的數量是O(n^2)所以,複雜度為O(n^3),至於貪心做法的正確性,可以通過證明方案的唯一性來證明,這裡不再研究貪心演算法。

這道題其實是有O(1)出答案,O(答案數量)出方案的做法的。

附上前10個點經過整理後的方案


[1]
 1

[2]
 3  1
 2

[3]
 5  4
 6  3  1
 7  2

[4]
11  5  4
10  6  3  1
 9  7  2
 8

[5]
13 12
14 11  5  4
15 10  6  3  1
16  9  7  2
17  8

[6]
23 13 12
22 14 11  5  4
21 15 10  6  3  1
20 16  9  7  2
19 17  8
18

[7]
25 24
26 23 13 12
27 22 14 11  5  4
28 21 15 10  6  3  1
29 20 16  9  7  2
30 19 17  8
31 18

[8]
39 25 24
38 26 23 13 12
37 27 22 14 11  5  4
36 28 21 15 10  6  3  1
35 29 20 16  9  7  2
34 30 19 17  8
33 31 18
32

[9]
41 40
42 39 25 24
43 38 26 23 13 12
44 37 27 22 14 11  5  4
45 36 28 21 15 10  6  3  1
46 35 29 20 16  9  7  2
47 34 30 19 17  8
48 33 31 18
49 32

[10]
59 41 40
58 42 39 25 24
57 43 38 26 23 13 12
56 44 37 27 22 14 11  5  4
55 45 36 28 21 15 10  6  3  1
54 46 35 29 20 16  9  7  2
53 47 34 30 19 17  8
52 48 33 31 18
51 49 32
50