商店每次购买都会发一张优惠券,可用于下次购物。凭证的价值是您当前购买的10%。例如,购物满10美元即可获得1美元的优惠券。
您需要购买 n 的东西。你应该以什么顺序支付他们以便尽可能少花钱?
因此,如果文章的价格是 u 0 , u 1 ,... < em>你 n -1 ,那么你实际支付的价格将是 v 0 ,... v n -1 ,重复规则 v k < / em> +1 = max(0, u k +1 - α×< em> v k ), v 0 = u < sub> 0 ,在这种情况下,α = 10/100。
示例:
您需要购买3篇文章,分别花费1美元,10美元和100美元。 然后你应该按照以下顺序购买它们:$ 1,$ 100,$ 10
因此,您将支付
1 + (100 - 1 * 10%) + (10 - (100 - 1 * 10%) * 10%) = 1 + 99.9 + 0.01 = 100.91
这比其他任何订购都要好。
(当然,如果有一次你碰巧的价格比下一篇文章的价格高一些 你想买,店里不给你钱。你只能支付正数金额)
我implemented a naive algorithm在阶乘时间内解决了这个问题,但是找不到能在合理的时间内解决这个问题的通用算法。