行业知识
算法-数学与简单DP-0-1背包问题
2026-11-14 19:49:17
来源:互联网转载
题目
��� N件物品和一个容量是 V的背包。每件物品只能使用一次。
()第 i件物品的体积是 vi,价值是 wi。
求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。
()输出最大价值。
输入格式
第一行两个整数,N,V用空格隔开,分别表示物品数量和背包容积。
接下来有 N行,每行两个整数 vi,wi,用空格隔开,分别表示第 i 件物品的体积和价值。
输出格式
输出一个整数,表示最大价值。
数据范围
0=v[i] : # 含i的情况可能不存在 f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])print(f[n][m])
一维优化:
n,m=map(int,input().split())f = [0 for _ in range(1010)] # 如果不是写成1010的话,会显示list out of range的报错v=[0]w=[0]for i in range(1,n+1): x,y=map(int,input().split()) v.append(x) w.append(y)for i in range(1,n+1): for j in range(m,v[i]-1,-1): f[j]=max(f[j],f[j-v[i]]+w[i])print(f[m])
AcWing 2. 01背包问题(状态转移方程讲解) - AcWing
上一篇:怎么建造服务器地图?