切換
舊版
前往
大廳
主題

ZeroJudge - e166: 演唱會記行 - 粉絲應援 解題心得

Not In My Back Yard | 2019-05-04 23:09:34 | 巴幣 2 | 人氣 432

題目連結:


題目大意:
給定一正整數 n (0 ≦ n ≦ 1, 000),代表有 n 個座位(當 n = 0 時,結束程式)。接著的第二列給定 n 個整數 p (-10, 000 ≦ p ≦ 10, 000),代表坐這個座位的粉絲之「波浪值」。

求連續的座位之波浪值總和最大為何?

注:此為圓形場地,所以第 1 個座位與第 n 個座位是相鄰的。



範例輸入:
5
1 2 -4 4 -5
5
1 2 -1 4 -5
5
1 2 -4 4 5
0


範例輸出:
4
6
12


解題思維:
首先先不考慮場地為圓形的,先假設場地為直線型,並假設現在 n = 5 ,且各自波浪值為:1 -2 1 3 4
則連續座位的最大總和可由以下的過程求出(藍色代表有挑選的數字):
首先,沒什麼好說的,挑了第一個數字,即為 1 :
 -2 1 3 4

接著, 1 + (-2) > -2 ,也就是說挑 1 和 -2 比只挑 -2 好:
1 -2 1 3 4

再來, 1 + (-2) + 1 < 1 ,因此只挑現在遇到的這個 1 比較好:
1 -2  3 4

再接著, 1 + 3 > 3 ,所以 1 、 3 都挑:
1 -2 1 3 4

最後,同上,所以挑了 1 、 3 、 4 :
1 -2 1 3 4

以上5步之中所產生過最大的結果為 1 + 3 + 4 = 8 ,因此答案即為 8 。

因此,每次掃到新數字時,就判斷先前挑過的數字之和再加上現在這個數字有沒有小於現在這個數字。如果有,忽略掉先前挑的數字,從這個數字開始挑;反之,將這個數字一併納入選擇。



但是以上並不適用於此題,因為此題為圓形場地(頭尾相接)。不過,可以藉由將所有數字往左移動一格,將這 n 個情形的場地視為線型場地,去做以上的演算法。 n 個情況都做完以後,再取其中的最大值即是答案。

接續以上的例子:
-2 1 3 4 1 的最大值為 9 。
1 3 4 1 -2 的最大值為 9 。
3 4 1 -2 1 的最大值為 8 。
4 1 -2 1 3 的最大值為 7 。
連同一開始的情況,其中的最大值為 9 ,因此答案為 9 無誤。

再精確一點,最大值的情況會在以負數開頭的情況中發生一次以上。以上面為例即為:
-2 1 3 4 1 ,所以可以只考慮以負數開頭的情況。(除非這 n 個數字皆為正數)

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作