我有一本有地点和数量的字典,比如
{'loc1': 1000.0,'loc2': 500.0, 'loc3': 200.0,'loc4': 100.0,'loc5': 50.0, }
Run Code Online (Sandbox Code Playgroud)
现在当我订购时,情景应如下所示,
150 quantity 它应该从loc5和loc4210 quantity 它应该从loc3和loc51777 quantity 它应该从loc1和loc2和loc3和loc4530 quantity 它应该从loc2和loc5.我不知道如何实现这样的条件,谁能解决它?
将数量放入列表中,进行排序.使用bisect找到一个适当的量.计算较低的数量是否可以满足,如果没有,则选择下一个更高的数量.减去选定的数量.如果仍然大于0,请返回bisect步骤.
编辑:
import bisect
qtys = [50, 100, 200, 500, 1000]
def sack(amt, qtys=qtys):
res = set()
while amt > 0:
pivot = bisect.bisect(qtys, amt)
if sum(qtys[:pivot]) >= amt:
amt -= qtys[pivot - 1]
res.add(pivot - 1)
else:
if sum(qtys[:pivot + 1]) < amt:
raise ValueError('Not enough items to fill the sack')
res.add(pivot)
amt -= qtys[pivot]
return res
print sack(150)
print sack(210)
print sack(1777)
print sack(530)
Run Code Online (Sandbox Code Playgroud)