【发布时间】:2018-12-16 20:19:30
【问题描述】:
所以我有一系列优惠券,每张都有价格和可以从中购买的物品数量。我只能从优惠券中购买给定的商品数量,不能多也不能少。如何找到获得所需数量的带有优惠券的商品的最低成本(如果不可能,则返回 -1)?
例如,如果有 4 张优惠券:“10 美元买 3”、“4 美元买 2”、“4 美元买 2”和“3 美元买 1”,并且要购买 4 件商品,则最低成本是 8 美元。
背包致力于寻找最大值,但对于最小值,它会继续不考虑任何优惠券并得出0的答案。
这是我的代码:
int minimumCost(coupon_t coupons[], int numCoupons, int units) {
if (units <= 0 || numCoupons <= 0)
return 0;
if (coupons[numCoupons-1].quantity > units)
return minimumCost(coupons, numCoupons-1, units);
coupon_t coupon = coupons[numCoupons-1];
return min(coupon.price + minimumCost(coupons, numCoupons-1, units-coupon.quantity),
minimumCost(coupons, numCoupons-1, units));
}
【问题讨论】:
标签: recursion dynamic-programming knapsack-problem