有 n
个物品和一个大小为 m
的背包. 给定数组 A
表示每个物品的大小和数组 V
表示每个物品的价值.
问最多能装入背包的总价值是多大?
样例 :
输入: m = 10, A = [2, 3, 5, 7], V = [1, 5, 2, 4]
输出: 9
解释: 装入 A[1] 和 A[3] 可以得到最大价值, V[1] + V[3] = 9
1、题目分析
我的理解:这个题目完全跟背包问题1类似,只不过在转移方程中重量改为了价值。
因此假设f[i][w] 表示用前i个物品拼出重量w时最大总价值
2、代码实现
class Solution:
"""
@param m: An integer m denotes the size of a backpack
@param A: Given n items with size A[i]
@param V: Given n items with value V[i]
@return: The maximum value
"""
def backPackII(self, m, A, V):
# write your code here
if len(V)==0 or m==0 or len(A)==0:
return 0
n=len(A)+1
dp=[0]*(m+1)
for i in range(1,n):
for j in range(m,-1,-1):
if j>=A[i-1]:
dp[j]=max(dp[j],dp[j-A[i-1]]+V[i-1])#注意对比与背包问题1的区别
return dp[m]