求解 x y 最小

2022-05-12 05:53:09 字數 597 閱讀 4907

問題:輸入陣列a和b,請通過交換的方式重新分配兩個陣列,使得|a-b|最小

提供一種思路:

當前陣列a和陣列b的和之差為    a = sum(a) - sum(b)

a的第i個元素和b的第j個元素交換後,a和b的和之差為

a' = ( sum(a) - a[i] + b[j] ) -( sum(b)- b[j] + a[i] )

= sum(a) - sum(b) - 2 (a[i] - b[j])

= a - 2 (a[i] - b[j])

設x= a[i] - b[j] |a| - |a'| = |a| - |a-2x|

假設a> 0, 當x在(0,a)之間時,做這樣的交換才能使得交換後的a和b的和之差變小, x越接近a/2效果越好, 如果找不到在(0,a)之間的x,則當前的a和b就是答案。

所以問題轉化成:

在a和b中尋找使得x在(0,a)之間並且最接近a/2的i和j,交換相應的i和j元素,重新計算a後,重複前面的步驟直至找不到(0,a)之間的x為止。

**驗證,待我有時間填坑。。。

求解最小生成樹

1.prim演算法求解,其思路與dijkstra差不多,不斷貪心往已選定的集合眾新增點,最終得到一棵最小生成樹。具體為什麼最 不清 1 int map 105 105 2 int mincost 105 3 int vis 105 4 void prim 518 if v 1 break 19 vi...

求解最小生成元

前言 因為看著劉汝佳的演算法書學習的演算法,今天聊聊最小生成元,關於這一點我覺得書上的方法有些不妥,因為就拿出來說說,這個演算法相對還是比較簡單的。最小生成元問題描述 如果x加上x的各個位數字之和得到y,就說x是y的生成元 給出n,1 n 100000 求最小生成元。無解輸出0。例如,n 216,1...

MATLAB求解最小球覆蓋問題

目錄 三 展示 四 結果展示 五 參考資料 1.理論依據 定理 如果點p不在集合s的最小覆蓋球內,則p一定在s 的最小覆蓋球上。根據這個定理,我們可以分三次確定前i個點的最小覆蓋圓。2.偽 圓 c for i 1 to n for j 1 to i 1 for k 1 to j 1 對於這個演算法只...