首页 > 试题广场 >

外卖满减

[编程题]外卖满减
  • 热度指数:5694 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
你打开了美了么外卖,选择了一家店,你手里有一张满 X 元减 10 元的券,店里总共有 n 种菜,第 i 种菜一份需要 Ai 元,因为你不想吃太多份同一种菜,所以每种菜你最多只能点一份,现在问你最少需要选择多少元的商品才能使用这张券。

数据范围: ,

输入描述:
第一行两个正整数n和X,分别表示菜品数量和券的最低使用价格。 接下来一行n个整数,第i个整数表示第i种菜品的价格。


输出描述:
一个数,表示最少需要选择多少元的菜才能使用这张满X元减10元的券,保证有解。
示例1

输入

5 20
18 19 17 6 7

输出

23
n, x = list(map(int, input().strip().split()))
val = list(map(int, input().strip().split()))
dp = [sum(val)]*(x+1)
for i in range(1, n+1):
    for j in range(x, 0, -1):
        if val[i-1] < j:
            dp[j] = min(dp[j], val[i-1]+dp[j-val[i-1]])
        else:
            dp[j] = min(dp[j], val[i-1])
print(dp[x])
背包问题的一个小变种

发表于 2021-03-13 13:07:25 回复(0)