是否有可能将具有给定成本的所有物品出售给具有给定金额的人



最近我遇到了一个真正的问题,我可以将其重新定义为以下算法任务:

问题:
假设一组N人,每个人都有一定的钱,还有一套M物品,每个人都有一些成本,是否有可能出售所有物品?

每件物品最多只能由一个人购买,每个人都可以购买多件物品,这样它们的成本就不会超过他拥有的金额。

我尝试的解决方案:
我正在考虑构建一个网络并找到像这样的最大流量的方向:
- 制作一个二分图,其中一部分的顶点对应于人,另一部分对应于项目。
- 将人与采购S联系起来,并为人们拥有的资金设置边缘能力。
- 将物料连接到汇T,并将边缘容量设置为物料成本。
- 将每个人连接到他可以购买的物品,并为物品成本设置边缘容量

如果在这个网络中发现的最大流量中的每个边都是空的或完全饱和的,那么问题将通过查看是否所有要T的边都饱和来解决,如果我们想知道谁应该购买什么物品,我们会查看左右部分之间的边。

但是,但问题是生成的流可能包含部分填充的边缘(意味着一个人为某些项目支付了部分费用(,这种情况我无法消除。

显然,这是一种垃圾箱包装问题。

另请参阅多个背包问题。

多个背包可以准确地解决这个问题,但这绝对是矫枉过正,因为所有元素都具有相同的重量(从背包的角度来看,这是有价值的(。

我的直觉建议使用贪婪的算法,在每次迭代中,你都试图将最昂贵的物品卖给目前仍然负担得起的最贫穷的人。它基于这样的信念:如果您在出售更便宜的物品之前不能出售一件物品,那么您根本不会出售它。此外,首先耗尽较贫穷买家的预算将使其他人有更多权力购买更昂贵的物品。我想你有足够的测试数据来验证它。

相关内容

最新更新