问题来了:
小明是一个爱吃零食的小伙子,平时会在网上购买各种好吃的零食。一天,小明了解到,在电商平台上购买不同种类的零食,会有各种各样的优惠活动,如:满99减50,满188减100,满288减150等,每种零食只参与其中一种优惠活动方式,还包邮哦,但也有条件,就是每种零食只限购一份。小明看了非常心动,原来网上购买零食这么划算,可以节省很多钱,真的太好了。心动不如行动,小明马上列出了所有参与活动的零食种类和其价格,以及每种零食种类参与的优惠活动方式,小明也看了看自己支付宝里面的余额为 M(正整数)元。但是小明烦恼也来了,左算右算,也算不出怎样选择零食的组合才能使自己买到的零食总和价格最大,聪明的你帮帮小明算算,在最后支付时(优惠后)的总金额不大于 M 的前提下,小明最多可以买到零食的价值总和 N。
输入数据包括:
(1)优惠活动:满减金额条件和其满减金额(小于或等于5种优惠活动);
(2)每种零食的价格和其参加的优惠活动(小于30中零食);
(3)小明支付宝金额 M。输出:小明最多可以买到零食的价值总和 N。
我的贪心算法解法:
- 计算各种优惠活动中购买的零食达到满减的最小总价 K1~K5(M >= K >= S)
- 计算各种优惠活动最低满减后价格 n1~n5(n = K - A,N = n+)
- 计算参与优惠活动的最优方案(最多2^5种,最终选出 n 集合,使得 N 最大)
- 最后如果有剩余零钱,则对剩余可购买的零食选最优方案,使得零钱趋向于零。
PS:中途可能计算出优惠活动不可用的情况,则在第3步计算方案前将其排除。不过在第4步要考虑全部优惠活动,以免错过最后一个花钱的机会呀(虽然已经没有优惠了)~~~
小伙伴,你有想到其他解法或者对我的解法有任何意见吗?欢迎评价分享你的想法~