首先可以參考 gtyuse 的想法
|a1x - x1| + |a2x - x2| + ... + |anx - xn|
可以看成是 a1 |x - x1/a1| +a2 |x - x2/a2| + ... +an |x - xn/an|
可以看成是找中位數的題目
我在這裡翻譯成更簡單的敘述
若要找 2*|x - 4| + 3*|x - 2| + |x - 3|
可以看成是 |x - 4| + |x - 4| + |x - 2| + |x - 2| + |x - 2| + |x - 3|
我們得到數列 4 4 2 2 2 3 3 排序後變成 2 2 2 3 4 4
其中x的最小值為即為此數列的中位數
以此題為例 在選擇偶數個元素的數列的中位數時,可以不用選擇(2+3)/2
你可以把2或3當成中位數,因為 2 或 3 或 5/2 與數列相減後得到的結果都會相同
ex
當x = 2帶入此數列後
|2 - 4| + |2 - 4| + |2 - 2| + |2 - 2| + |2 - 2| + |2 - 3| = 5
當x = 3帶入此數列後
|3 - 4| + |3 - 4| + |3 - 2| + |3 - 2| + |3 - 2| + |3 - 3| = 5
當x = 5/2帶入此數列後
|5/2 - 4| + |5/2 - 4| + |5/2 - 2| + |5/2 - 2| + |5/2 - 2| + |5/2 - 3| = 5
而且最後一個陷阱是總合會超過int範圍 所以請用long long int
大概就是這樣