2017-08-01 39 views
0

最近,我遇到了一个真正的问题,我可以refolmulate为以下算法任务的钱给量:是否有可能与给定的成本出售的所有项目,以人

问题:
给定一组N个人,每个人都有一定数额的金钱和一套M物品,每个物品都有一定的成本,是否有可能出售所有物品?

每件商品最多只能由一个人购买,每个人可以购买多件商品,以使其成本不超过他所拥有的金额。

我尝试的解决方案:
我想构建一个网络,找到一个最大流这样的方向:
- 使对应于人的一部分与顶点的bipartide图,而在其他部分 - 项目。
- 将人连接到源S,并将边缘容量设置为人们拥有的金钱。
- 将物品连接到水槽T并将边缘能力设置为物料成本。
- 连接每个人的项目,他可以购买和设置边缘能力的项目成本

在情况下,在最大流量每边在这个网络中发现要么是空的或完全饱和的,这个问题将通过寻找可以解决如果所有到T的边都是饱和的,并且如果我们想知道谁应该买什么物品,我们会看左边和右边部分之间的边缘。

但是,问题是,产生的流可以包含部分填充的边缘(意思是一个人部分支付一些项目),这种情况下,我无法消除。

回答

0

多背包可以准确地解决这个问题,但肯定它是一个矫枉过正的,因为所有元素都具有相同的权重(这是背包的观点的价值)。

我的直觉表明,在每一次迭代中,当您尝试向最穷的人出售最昂贵的物品时,仍然可以负担得起的时候,使用贪婪算法。这是基于相信,如果你在出售便宜的商品之前不能出售一件商品,你根本不会卖出它。另外,首先耗尽较贫穷购房者的预算将使其他人有更多的权力购买更昂贵的物品。我想你有足够的测试数据来验证它。

相关问题