【发布时间】:2011-06-21 09:00:14
【问题描述】:
注意:这是对有关 SWF 文件中记录排序的现实问题的抽象改写。解决方案将帮助我改进开源应用程序。
Bob 有一家商店,他想进行销售。他的商店有许多产品,他的库存中每种产品都有一定的整数单位。他还有许多架在货架上的价格标签(与产品数量一样多),上面已经印有价格。他可以在任何产品上贴上任何价格标签(该产品的全部库存中一件商品的统一价格),但是有些产品有一个额外的限制 - 任何此类产品可能不会比某个其他产品便宜。
您必须找到如何安排价格标签,以使 Bob 的所有商品的总成本尽可能低。总成本是每个产品的指定价格标签乘以该产品的库存数量的总和。
给定:
- N – 产品和价格标签的数量
- Si, 0≤i
i的产品的库存数量(整数) - Pj, 0≤j
j的价格(整数) - K – 附加约束对的数量
- Ak, Bk, 0≤k
- 任何产品索引在B中最多出现一次。因此,这个邻接表形成的图实际上是一组有向树。
程序必须找到:
- Mi, 0≤i
Mi 是产品的价格 i)
满足条件:
- PMAk ≤ PMBk,对于 0≤k
- Σ(Si × PMi) for 0≤ i
- Σ(Si × PMi) for 0≤ i
请注意,如果不是第一个条件,解决方案将是简单地按价格排序标签和按数量排序产品,并直接匹配两者。
输入的典型值为 N,K
以下是为什么大多数简单解决方案(包括拓扑排序)不起作用的一个示例:
您有 10 件数量为 1 到 10 的商品,以及 10 个价格为 1 到 10 美元的价格标签。有一个条件:数量为 10 的商品不得低于数量为 1 的商品。
最优解是:
Price, $ 1 2 3 4 5 6 7 8 9 10
Qty 9 8 7 6 1 10 5 4 3 2
总费用为 249 美元。如果将 1,10 对放在任一极端附近,总成本会更高。
【问题讨论】:
-
如果对项目进行拓扑排序,数量作为“决胜局”会发生什么。然后与价格相匹配。这是否提供了最佳/足够好的解决方案?
-
Bob 应该开一家价值 1 美元的商店。
-
啊,好吧,我发现了一个基于拓扑排序的贪婪方法中断的情况。库存:Ax1、Bx10、Cx2。约束:A
-
@BlueRaja:为了升级吹毛求疵,上述问题不在 NP 中。询问是否存在总价格小于 X 的配置在 NP 中,这会导致原始问题的多项式等价解决方案。这可能是 NP 难的。几分钟的随意思考未能产生一个已知的 NP 完全问题,从而简化为这个问题。
-
这是我在网站上看到的最好的算法问题之一。我正在向它添加赏金以尝试激发对答案的兴趣。
标签: algorithm