小红正在一座神秘遗迹中收集宝藏。遗迹中共有 n 件宝藏,第 i 件宝藏需要花费 t_i 分钟来收集,其价值为 p_i 。 小红的总探险时间不能超过 T 分钟。此外,如果某件宝藏的收集时间 t_i 严格大于 30 分钟,该宝藏将被视为“重型宝藏”。小红在本次探险中收集的“重型宝藏”总数不得超过 m 个。 每件宝藏最多只能收集一次。请你帮小红计算,在满足时间和重型宝藏数量限制的前提下,她能获得的最大价值总和。
第一行包含三个整数 n, T, m ( 1 ≤ n ≤ 100, 1 ≤ T ≤ 5000, 0 ≤ m ≤ 100 ),分别表示宝藏总数、最大允许总时间、以及最大允许的重型宝藏数量。 接下来的 n 行,每行包含两个整数 t_i 和 p_i ( 1 ≤ t_i ≤ 60, 1 ≤ p_i ≤ 1000 ),分别表示第 i 件宝藏的收集时间与价值。
输出一个整数,表示小红能获得的最大总价值。
4 100 1 20 50 35 60 25 30 40 70
150
考点:动态规划
数据规模 n ≤ 100 | 限制 3 秒 / 256MB | 标准输入输出
推荐方向:动态规划
本题切入点
带「重型宝藏数量上限 m」的 0/1 背包:dp[j][t] = 用 t 时间、已选 j 件重型时的最大价值,每件宝藏按是否为重型分别转移;n≤100、T≤5000 可二维递推。
把问题拆成子问题,用状态表示「已处理到哪儿」,靠转移方程递推。
思路框架(动态规划 通法 · 非本题专属)
实现要点:一般是「先枚举阶段,再枚举状态,最后枚举决策」三层循环;空间大时可滚动数组优化。
复杂度:时间 O(状态数 × 转移代价) | 空间 O(状态数)
该范式的通法易错点
对照本题
样例 1:输入 4 100 1 / 20 50 / 35 60 / 25 30 / 40 70 → 输出 150
在样例中, n=4, T=100, m=1 。宝藏详情如下:
小红可以选择收集宝藏 1、宝藏 3 和 宝藏 4。
总耗时: 20 + 25 + 40 = 85 ≤ 100 。
重型宝藏数量:仅宝藏 4 一件,数量为 1 ≤ 1 。
总价值: 50 + 30 + 70 = 150 。
可以证明这是满足条件的最大价值方案。
解析由校招宝本地引擎整理(依据源站考点标签 / 人工判题标注 / 题面规模信号),非官方题解,仅供思路参考。
本题来源:2026年-华为-1月21号开发岗。