0

我正在努力为算法课程提出解决此问题的方法:

你去一家商店,想要购买n = {n 1 , n 2 , ..., n n }商品,其中商品可以不同也可以不同。

这家商店有以下促销活动:“如果顾客购买了两件商品,其价格加起来以 11 美分、33 美分或 55 美分结尾,他将收到一张价值相应美分的代金券。”

问题是提出一种算法,该算法计算购买给定商品集合的最佳策略,其中希望总成本最小化。

例如:如果您需要购买价格为(1.01 美元、2.10 美元和 3 美元)的 3 种产品(n 1、n 2、n 3),您应该同时购买 n 1和 n 2并分别购买 n 3,得到 a总成本:(1.01 + 2.10) + 3 - (0.11) = 6$。

没有给出任何提示,但我认为我可以使用一些流网络方法。

4

1 回答 1

0

按美分价格对您要购买的物品进行排序......即(25.01 美元、1.02 美元、......、0.99 美元)。

然后检查...是否有任何美分的总和达到 0.99 美元...这可以通过两个和问题轻松解决...您取 0.01 美元并使用二进制搜索查找它的补码 0.98 美元...删除这对并重复,直到您找不到总和为 0.99 美元的美分产品对。

如果这样做了,删除找到的产品对...计算您的收益并检查是否有任何美分总和为 0.88 美元...以相同的方式。

...

如果这样做了,删除找到的产品对......并检查是否有任何美分总和为 0.11 美元......以同样的方式。

这都是O(nlogn)复杂的;)

于 2017-01-15T17:06:54.500 回答