我有一组offers
,我有一个cart of Items
。该套优惠使得该套优惠中的所有优惠都是相互冲突的优惠,这意味着可以在购物车中的商品上应用多个商品。
示例:
These are my offers:
offerId Offer Description
1 vim+cabbage will give discount of 500
2 cabbage has rs 50 discount
3 vim has Rs. 30 discount
This is my cart:
Item : quantity
cabbage : 10
vim : 5
现在我想找到可以应用于购物车的最佳优惠。在上面的情况下,我最好的报价是我每次提供5个数量的vim和卷心菜的优惠1,这将给我5 * 500的总折扣和剩余的5个卷心菜我申请优惠2,这将给我5 * 50的折扣
所以我的总折扣是:5 * 500 + 5 * 50 = 2750。
要注意的是,另一个选择是在10个数量的卷心菜上应用优惠2,并在5个量的vim上提供3个。这会给我一个折扣:10 * 50 + 5 * 30 = 650,这比第一种情况要小。但这是错误的,因为最好的报价将是上述报价。
现在这只是其中一个例子。我可以在购物车中有许多重叠的商品和许多商品,这些商品会在哪些商品上重叠。
我尝试了一种递归方法来解决这个问题。伪代码在这里:
func recursive(offers, cartItems){
if(offers[0] is applicable on cartItems){
lDiscount = recursive(offers-offer[0], cartItems -variantsOnWhichOfferApplied) + discount
rDiscount = recursive(offers - offers[0],cartItems)
if (lDiscount > rDiscount){
return lDiscount
} else{
return rDiscount
}
}else{
recursive(offers-offer[0],cartItems)
}
}
offer是一系列优惠:
在这种情况下:优惠1可以在购物车上应用5次,优惠2可以应用10次,提供3次可以应用5次。所以在offers
数组中我有这样的条目:
offers = [1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3]
我得到了正确的答案,但递归花了太长时间来解决这个问题。
任何人都可以告诉我如何将其转换为dp,或者如果有其他方法可以减少此方法的时间复杂度。
感谢。