前言
最近在牛客网上刷题,遇到一题代金券的问题,花了我一下午时间研究(我才刚开始复习算法和数据结构),写此文章来记录一下。
题目传送门:https://www.nowcoder.com/question/next?pid=21910781&qid=894518&tid=31674041 第六题
问题
近期某商场由于周年庆,开启了“0元购”活动。活动中,消费者可以通过组合手中的代金券,实现0元购买指定商品。
聪明的小团想要用算法来帮助他快速计算:对于指定价格的商品,使用代金券凑出其价格即可,但所使用的代金券总面额不可超过商品价格。由于代金券数量有限,使用较少的代金券张数则可以实现价值最大化,即最佳优惠。
假设现有100元的商品,而代金券有50元、30元、20元、5元四种,则最佳优惠是两张50元面额的代金券;而如果现有65元的商品,则最佳优惠是两张30元代金券以及一张5元代金券。
请你帮助小团使用一段代码来实现代金券计算。
思考
蠢蠢的我第一反应就是使用贪心算法(毕竟我还没开始复习),但是后来发现通过率不高才想起贪心算法算出最优解是有条件的,这题并不满足。(贪心算法是啥?搜其他文章去吧)所以要用动态规划(看了很多其他文章才发现的,其实这类问题叫做找零问题)。有很多解法都是用其他语言的,然后