给定 n
种物品, 每种物品都有无限个. 第 i
个物品的体积为 A[i]
, 价值为 V[i]
.
再给定一个容量为 m
的背包. 问可以装入背包的最大价值是多少?
样例 1:
输入: A = [2, 3, 5, 7], V = [1, 5, 2, 4], m = 10
输出: 15
解释: 装入三个物品 1 (A[1] = 3, V[1] = 5), 总价值 15.
样例 2:
输入: A = [1, 2, 3], V = [1, 2, 3], m = 5
输出: 5
解释: 策略不唯一. 比如, 装入五个物品 0 (A[0] = 1, V[0] = 1).
1、题目分析
我的理解这个问题和背包问题5类似,只不过同样是将重量改为了价值。
因此假设设f[i][w] 表示 用前i个物品拼出重量w时最大总价值
2、代码实现
class Solution:
"""
@param A: an integer array
@param V: an integer array
@param m: An integer
@return: an array
"""
def backPackIII(self, A, V, m):
# write your code here
if len(V)==0 or m==0 or len(A)==0:
return 0
dp=[0]*(m+1)
for i in range(1,m+1):
for j in range(len(A)):
if i>=A[j]:
dp[i]=max(dp[i],dp[i-A[j]]+V[j])#注意对比与背包问题5的区别
return dp[m]