优惠券使用/凑满减优惠/硬币组合问题(结果包括最优组合和最优值)

本文介绍了如何使用动态规划(DP)解决满减优惠组合问题,包括求解最少消费值及其对应的组合。文章分析了算法的优缺点,并提供了一种优化方法来寻找最优组合。
摘要由CSDN通过智能技术生成

DP法求满减优惠组合问题

一、原问题描述

时间限制:10000ms
单点时限:1000ms
内存限制:256MB

描述

最近天气炎热,小Ho天天宅在家里叫外卖。他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, … AN元。并且如果消费总计满X元,还能享受优惠。小Ho是一个不薅羊毛不舒服斯基的人,他希望选择若干道不同的菜品,使得总价在不低于X元的同时尽量低。

你能算出这一餐小Ho最少消费多少元吗?
输入

第一行包含两个整数N和X,(1 <= N <= 20, 1 <= X <= 100)

第二行包含N个整数A1, A2, …, AN。(1 <= Ai <= 100)
输出

输出最少的消费。如果小Ho把N道菜都买了还不能达到X元的优惠标准,输出-1。
样例输入

10 50
9 9 9 9 9 9 9 9 9 8

样例输出

53

二、算法参考链接与分析
1、求最少消费的值算法
促销中“满X优惠”问题的两种解法:动态规划和枚举法
枚举法: 瓶颈在于 for(int s=1; s<(1<<n); s++)中,由于是2^n指数级复杂度,而int整型最大值2的32次方,即n的值理论上不超过32,即便是long型,n最大不超过64。
动态规划法:只能求解最少消费的值&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值