#4222. 小杨买饮料(23-9C++六级)

小杨买饮料(23-9C++六级)

小杨买饮料

【问题描述】 小杨来到了一家商店,打算购买一些饮料。这家商店总共出售N种饮料 ,编号 从0至N-1,其中编号为i的饮料售价?元,容量?毫升。 小杨的需求有如下几点:

小杨想要尽可能尝试不同种类的饮料,因此他希望每种饮料至多购买1瓶;小杨很渴,所以他想要购买总容量不低于L的饮料;. 小杨勤俭节约,所以在1和2的前提下,他希望使用尽可能少的费用。 方便起见,你只需要输出最少花费的费用即可。特别地,如果不能满足小杨的要 求,则输出 nosolution。

【输入描述】

第一行两个整数N,L。 接下来N行,依次描述第i=0,.....N-1 种饮料:每行两个整数��,��。

【输出描述】

输出一行一个整数,表示最少需要花费多少钱,才能满足小杨的要求。特别地, 如果不能满足要求,则输出nosolution 。 【样例输入1】
5 100
100 2000
2 50
4 40
5 30
3 20
【样例输出1】 9
【样例解释1】 小杨可以购买1,2,4号饮料,总计获得50+40+20=110毫升饮料,花费2+4+3=9 元

【样例解释1】

小杨可以购买1,2,4号饮料,总计获得50+40+20=110毫升饮料,花费2+4+3=9 元。 如果只考虑前两项需求,小杨也可以购买1,3,4号饮料,它们的容量总和为 50+30+20=100 毫升,恰好可以满足需求。但遗憾的是,这个方案需要花费 2+5+3=10 元 【样例输入2】

5 141 100 2000 2 50 4 40 5 30 3 20

【样例输出2】

100

【样例解释2】 1,2,3,4号饮料总计140毫升,如每种饮料至多购买1瓶,则恰好无法满足 需求,因此只能花费100元购买0号饮料。 【样例输入3】 4 141 2 50 4 40 5 30 3 20 【样例输出3】 no solution 【数据规模】 对于40%的测试点,保证N≤20;1≤L≤100;��≤100。 对于70%的测试点,保证��≤100。

【题目大意】 小杨要用尽可能少的费用从N种饮料中购买总容量不低于L的饮料,每个饮料 都给出对应的售价和容量。 【解题思路】 本题主要考察动态规划算法,是背包问题的变体。

  1. 输入两个整数n和L,然后创建一个长度为L的列表dp,初始化为10的10 次方,但dp[0]被设置为0。
  2. 进行n次循环,每次循环中,读取两个整数c和l,然后更新dp列表。
    1. 最后,如果ans仍然是无穷大,那么输出"nosolution",否则输出ans

Limitation

1s, 1024KiB for each test case.