返回首页 返回题库

道具商店

C++ 中等 GESP六级真题 #动态规划#背包问题

题目描述

题面描述

道具商店里有件道具可供挑选。第件道具可为玩家提升点攻击力,需要枚金币才能购买,每件道具只能购买一次。现在你有枚金币,请问你最多可以提升多少点攻击力?

输入格式

第一行,两个正整数 ,表示道具数量以及你所拥有的金币数量。

接下来 行,每行两个正整数 ,表示道具所提升的攻击力点数,以及购买所需的金币数量。

输出格式

输出一行,一个整数,表示最多可以提升的攻击力点数。

样例1

输入:

3 5
99 1
33 2
11 3

输出:

132

样例2

输入:

4 100
10 1
20 11
40 33
100 99

输出:

110

数据范围

对于 60% 的测试点,保证 ,。

对于所有测试点,保证 ,,,。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察动态规划的优化应用,属于01背包的变种。由于金币上限$k$非常大(可达$10^9$),传统以重量为状态的背包无法使用,因此转换状态定义:令$f[i]$表示获得$i$点攻击力所需的最小金币数,最后找到最大的$i$满足$f[i] \leq k$即可。攻击力总上限为$n \times a_i = 500 \times 500 = 250000$,状态规模在可接受范围内。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 2 浏览

讨论(0)