#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
LL f[310]; // 定义一个数组f,用于存储每个金币数对应的最大战力
int main() {
int n, x; cin >> n >> x; // 输入装备数量和小红初始拥有的金币
for (int i = 1; i <= n; i ++ ) { // 遍历每个装备
int a, b, c, d, e;
cin >> a >> b >> c >> d >> e; // 输入装备的属性:装备初始战力、购买价格、强化花费、强化提升战力、最高等级
for (int j = x; j >= b; j -- ) { // 从x开始遍历到购买价格b,计算每个金币数对应的最大战力
int cnt = min(e, (j - b) / c); // 计算当前金币数下最多可以强化的次数
for (int k = 0; k <= cnt; k ++ )
f[j] = max(f[j], f[j - b - k * c] + k * d + a); // 更新最大战力
}
}
cout << f[x] << endl; // 输出小红可以达到的最大战力
return 0;
}
/*
* 假设当前金币数为 j,购买装备需要花费 b 个金币
* 每次强化需要花费 c 个金币
* 那么,如果购买该装备后,剩余的金币数为 (j - b)
* 则最多可以强化的次数为 (j - b) / c。
*/
小红升装备 01背包
最新推荐文章于 2024-10-02 23:40:03 发布