ki = wi/vi sort ki from top to bottom and save the sorted index boxes = newvector() while sum{si}>0 box = newint[N] while W>0 && V>0 && sorted_index.length>0 K = W/V will_load = -1 for i in sorted_index if K >= ki will_load = i break if will_load == -1 will_load = sorted_index.back() num = min{floor(W/w[will_load], s[will_load]} else num = min{floor(V/v[will_load]), s[will_load]} if num <= 0 break W -= num*w[will_load] V -= num*v[will_load] s[will_load] -= num box[will_load] = num // 已装箱的物品不再考虑 sorted_index.remove(will_load) boxes.push_back(box)