郵政總局的包裹區一片狼藉。 需要裝載到貨車上的包裹已按任意重量順序排成一排。 郵政總站管理員希望按照包裹重量的升序對它們進行分類,但有一個例外。 他希望將最重(也可能是最有價值)的包裹放在離他辦公室最近的地方。
問題描述
郵政總局的包裹區一片狼藉。 需要裝載到貨車上的包裹已按任意重量順序排成一排。 郵政總站管理員希望按照包裹重量的升序對它們進行分類,但有一個例外。 他希望將最重(也可能是最有價值)的包裹放在離他辦公室最近的地方。
您和您的朋友嘗試對這些盒子進行排序,並且您決定通過一次交換兩個盒子來對它們進行排序。 這樣的交換需要的努力等於兩個盒子重量的乘積。
目標是以最小的努力根據需要重新定位盒子。
輸入
第一行由兩個空格分隔的正整數組成,給出箱子的數量 (N) 以及最重箱子所在的郵政局長辦公室位置 (k)。
第二行由 N 個空格分隔的正整數組成,給出了框的權重。 您可以假設沒有兩個權重是相等的。
輸出
輸出一行給出了按排序順序排列盒子所需的總工作量,以及最重的位置 k。
限制
N
權重
難度等級
複雜
時間限制(秒)
1
範例
範例1
輸入
5 2
20 50 30 80 70
輸出
3600
說明
有 5 個盒子 (N=5),最重的盒子必須位於位置 2 (k=2)。 如果我們看最終的訂單(已排序,最重的在位置 2),它應該是 20 80 30 50 70。如果我們看一下這個,我們注意到只有 50 和 80 包裹需要交換。 由於這需要權重乘積的努力,因此努力為 4000。
如果我們使用最小的包(20)作為中介,可以獲得進一步的減少。 如果我們用50(努力1000)交換20,然後用80(努力1600)交換,再用50(努力1000)交換,效果是一樣的,總努力為3600(小於直接獲得的努力)移動)和努力
最優交換順序後的結果是
50 20 30 80 70
50 80 30 20 70
20 80 30 80 70
由於這需要 3600 的努力,因此輸出為 3600。
範例2
輸入
6 3
30 20 40 80 70 60
輸出
7600
說明
有6個包裹,最重的應該在位置3。因此最終訂單需要是20 30 80 40 60 70。如果我們看初始位置,我們發現20和30需要交換(努力600),40和80需要交換(努力3200),60和70需要交換(努力4200)。 因此,總工作量為 600 3200 4200=8000。
如果我們使用與範例 1 相同的方法,我們會得到以下效果
(600) 20 30 40 80 70 60
(3200) 20 30 80 40 70 60
(1200) 60 30 80 40 70 20
(1400) 60 30 80 40 20 70
(1200) 20 30 80 40 60 70
總共獲得了 7600 的努力,而不是 8000 的努力,這是輸出。
以上是TCS_CODEVITA_QUESTION(需要解決方案)的詳細內容。更多資訊請關注PHP中文網其他相關文章!