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。
动态规划法:只能求解最少消费的值&#