A36254. 小杨买饮料问题描述小杨来到了一家商店,打算购买一些饮料。这家商店总共出售 N种饮料,编号从0至 N-1,其中编号为 i 的饮料售价 ci 元,容量 li 毫升。小杨的需求有如下几点:1. 小杨想要尽可能尝试不同种类的饮料,因此他希望每种饮料至多购买 1 瓶;2. 小杨很渴,所以他想要购买总容量不低于L的饮料;3. 小杨勤俭节约,所以在 1 和 2 的前提下,他希望使用尽可能少的费用。方便起见,你…
填空题
困难
知识点
题目描述
小杨买饮料
问题描述
小杨来到了一家商店,打算购买一些饮料。这家商店总共出售 N种饮料,编号从0至 N-1,其中编号为 i 的饮料售价 ci 元,容量 li 毫升。
小杨的需求有如下几点:
1. 小杨想要尽可能尝试不同种类的饮料,因此他希望每种饮料至多购买 1 瓶;
2. 小杨很渴,所以他想要购买总容量不低于L的饮料;
3. 小杨勤俭节约,所以在 1 和 2 的前提下,他希望使用尽可能少的费用。方便起见,你只需要输出最少花费的费用即可。特别地,如果不能满足小杨的要求,则输出 no solution 。
输入描述
第一行两个整数 N , L 。
接下来 N 行,依次描述第i =0,1,...,N-1种饮料:每行两个整数 ci , li 。
输出描述
输出一行一个整数,表示最少需要花费多少钱,才能满足小杨的要求。特别地,如果不能满足要求,则输出 nosolution 。
特别提醒
在常规程序中,输入、输出时提供提示是好习惯。但在本场考试中,由于系统限定,请不要在输入、输出中附带任何提示信息。
样例输入 1
5 100
100 2000
2 50
4 40
5 30
3 20样例输出 1
9参考答案
n, L = map(int, input().split())
inf = 10 * * 10
dp = [inf
for i in range(L)
]
dp[0] = 0
ans = inf
for i in range(n):
c, l = map(int, input().split())
for j in range(max(L - l, 0), L):
ans = min(ans, dp[j] + c)
for j in range(L - 1, l - 1, -1):
dp[j] = min(dp[j], dp[j - l] + c)
if ans == inf:
print("no solution")
else :
print(ans)
上一题
下一题