輸入一個大小為 𝑁 的一維整數陣列 p[] ,要找其中一個所謂的最佳切點將陣列切成左右兩塊,然後針對左右兩個子陣列繼續切割,切割的終止條件有兩個:子陣列範圍小於 3 或切到給定的層級 𝐾 就不再切割。而所謂最佳切點的要求是讓左右各點數字與到切點距離的乘積總和差異盡可能的小,但不可以是兩端點,也就是說,若區段的範圍是[𝑠, 𝑡],則要找出切點 𝑚 ∈ [𝑠+1, 𝑡-1],使得 越小越好,如果有兩個最佳切點,則選擇編號較小的。所謂切割層級的限制,第一次切以第一層計算。
輸入格式:第 一行 有兩 個正整數 𝑁 與 𝐾 。 第二行 有 𝑁 個正整數 代表陣列內容 p[1] ~ p [𝑁],數字間以空白隔開, 總和不超過 109。 𝑁 ≤ 50000,切割層級限制 𝐾 < 30。
所有切點的 p[ ] 值總和。
7 1 2 4 1 3 7 6 9
7
7 3 2 4 1 3 7 6 9
11
範例一說明:
第一層切在7,切成第二層的[2, 4, 1, 3]與[6, 9]。左邊[2, 4, 1, 3]切在4與1都是最佳,選擇4來切,切成[2]與[1, 3],右邊[6, 9]不到3個就不切了。第三層都不到3個,所以終止。總計切兩個位置7+4=11。
範例二說明:
第一層切在4(注意切點不可在端點),切出[1, 2, 3]與[100],因為K=1,所以不再切。
提示:與P_1_3類似,只是找切割點的定義不同,終端條件多了一個切割層級。
編號 | 身分 | 題目 | 主題 | 人氣 | 發表日期 |
沒有發現任何「解題報告」 |