测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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)
上一题 下一题