通过率 0% · 提交 0 · 通过 0
这道 OJ 的配套动画
二维费用背包 · 对应本题的思路、过程和代码
一台推理服务器同时受两种资源限制:显存预算 W MB 与算力预算 C 单位。现有 n 个候选模型,第 i 个模型部署后占用显存 w_i MB、占用算力 c_i 单位,带来收益 v_i。每个模型至多部署一份,所选模型的显存占用之和不能超过 W,算力占用之和不能超过 C。请输出可以获得的最大总收益。注意:w_i 或 c_i 可以为 0,也可能超过对应预算(此时该模型必然无法部署)。
这类题属于算法机考高频题型中「华为 AI 岗 / 二维费用背包」方向的高频题型,通常考察对「华为 AI 岗 / 二维费用背包」的建模能力与边界条件处理。掌握本题的解题思路后,可举一反三应对同类真题方向,稳步提升机考通过率。
第一行输入三个整数 n W C。随后 n 行,每行三个整数 w_i c_i v_i,表示一个模型的显存占用、算力占用与收益。
输出一行一个整数,表示最大总收益。
1 <= n <= 80;0 <= W, C <= 150;0 <= w_i, c_i <= 300;0 <= v_i <= 100000。
示例 1
输入示例
3 10 10 5 3 60 4 6 40 6 6 50
输出示例
100
双预算下的基础组合选择
示例 2
输入示例
3 5 5 0 0 7 5 5 9 3 2 4
输出示例
本平台为独立第三方培训机构,与华为技术有限公司无任何关联;课程的服务内容与权益以购买协议为准,学习效果因个人情况而异。「华为 OD」「华为可信」等仅为对岗位与考试方向的客观描述,相关商标归各自权利人所有。
训练营动画视频讲解
登录后可查看你在本题的历史提交,以及每次的各用例通过情况。
16
零占用模型直接部署
时间限制 4000 ms · 内存限制 256 MB
© 2026 广州慕课网络科技有限公司 · 吴师兄学算法官网 版权所有
定义 dp[w][c] 为显存不超过 w、算力不超过 c 时的最大收益。逐个模型处理,对两个容量都从上限倒序枚举,转移为 max(dp[w][c], dp[w-w_i][c-c_i]+v_i)。
处理第 i 个模型时,倒序遍历保证转移来源仍是尚未使用第 i 个模型的上一层状态,因此每个模型最多选择一次。转移比较不选与选择两种互斥情况,归纳可得处理完全部模型后覆盖所有合法组合。
时间复杂度 O(nWC),二维状态空间 O(WC)。
任一资源超预算的模型跳过;w_i=c_i=0 时倒序循环仍只访问每个状态一次,因此正收益只增加一次。
import sys
def solve() -> None:
data = sys.stdin.buffer.read().split()
if not data:
return
it = iter(data)
n = int(next(it)); W = int(next(it)); C = int(next(it))
dp = [[0] * (C + 1) for _ in range(W + 1)]
base = 0
for _ in range(n):
w = int(next(it)); c = int(next(it)); v = int(next(it))
if v <= 0:
continue
if w == 0 and c == 0:
base += v
continue
if w > W or c > C:
continue
for wi in range(W, w - 1, -1):
row = dp[wi]
old = dp[wi - w]
if c == 0:
row[:] = [y + v if y + v > x else x for x, y in zip(row, old)]
else:
row[c:] = [y + v if y + v > x else x for x, y in zip(row[c:], old[:C + 1 - c])]
print(base + dp[W][C])
if __name__ == "__main__":
solve()