UVa 11997 - K Smallest Sums

出處:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=3148

解題策略:優先權佇列+多個陣列合併

首先合併第一個陣列A與第二個陣列B,

Step1)第一個陣列A,由小到大排序

Step2)第二個陣列B,由小到大排序

Step3)取出陣列A的每一個元素,加上B[0],佇列元素為node(A[i]+B[0], 0),0為序列B的索引值index,將此k個元素放到優先權佇列pq。

Step4)取出pq的第一個元素到tmp,此時陣列A已經不再需要了,因為tmp.val等於A[i]+B[0],將此元素tmp.val儲存到陣列A,陣列A為陣列A與陣列B合併後的結果,此陣列A為下一次輸入的陣列A。

tmp.val - B[index]+B[index+1]是下一個可能的數值,將node(tmp.val - B[index]+B[index+1], index+1)加到優先權佇列pq。

以上動作重複k次,陣列A為陣列A與陣列B合併後的結果。

Step5)清空優先權佇列pq。

Step6)輸入第三個(下一個)陣列到陣列B,由小到大排序,回到Step3),以上動作重複k-2次

Step7)輸出陣列A,就是答案