, :
1. list<int> set1, set2;
2. sort(set2)
3. struct set1item = {set1index, value, list<int> chosen}
4. prepare list<set1item> set1items from set1
5. put set1items to some priorityqueue pq
6. for each set2item in set2{
7. item = pq.first()
8. item.chosen.add(set2item);
9. item.value -= set2item;
10. pq.updateFirst(item)
11.}
: set2 , set1, , set2, set2 set1.
, set1 .
1:
Set1 = {20, 9, 7, 3}, Set2 = {7, 6, 6, 4, 2, 2, 2, 2, 2, 2, 2, 2}.
iter1: fromSet2 = 7, Set1 = {20:{}, 9:{}, 7:{}, 3:{}}, fromSet1=20.
20 7 7 . : Set1 = {13:{7}, 9:{}, 7:{}, 3:{}}.
iter2: fromSet2 = 6, Set1 = {13:{7}, 9:{}, 7:{}, 3:{}}, fromSet1=13.
13 6 6 . : Set1 = {7:{7, 6}, 9:{}, 7:{}, 3:{}}.
iter3: fromSet2 = 6, Set1 = {7:{7, 6}, 9:{}, 7:{}, 3:{}}, fromSet1=9.
9 6 6 . : Set1 = {7:{7, 6}, 3:{6}, 7:{}, 3:{}}.
iter4: fromSet2 = 4, Set1 = {7:{7, 6}, 3:{6}, 7:{}, 3:{}}, fromSet1=7.
7 4 4 . : Set1 = {3:{7, 6, 4}, 3:{6}, 7:{}, 3:{}}.
iter5: fromSet2 = 2, Set1 = {3:{7, 6, 4}, 3:{6}, 7:{}, 3:{}}, fromSet1=7.
7 2 2 . : Set1 = {3:{7, 6, 4}, 3:{6}, 5:{2}, 3:{}}.
...