你打开了美了么外卖,选择了一家店,你手里有一张满 X 元减 10 元的券,店里总共有 n 种菜,第 i 种菜一份需要 Ai 元,因为你不想吃太多份同一种菜,所以每种菜你最多只能点一份,现在问你最少需要选择多少元的商品才能使用这张券。
数据范围: ,
第一行两个正整数n和X,分别表示菜品数量和券的最低使用价格。 接下来一行n个整数,第i个整数表示第i种菜品的价格。
一个数,表示最少需要选择多少元的菜才能使用这张满X元减10元的券,保证有解。
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]) 背包问题的一个小变种