#coding:utf-8 # # 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 # # 计算01背包问题的结果 # @param V int整型 背包的体积 # @param n int整型 物品的个数 # @param vw int整型二维数组 第一维度为n,第二维度为2的二维数组,vw[i][0],vw[i][1]分别描述i+1个物品的vi,wi # @return int整型 # class Solution: def knapsack(self , V , n , vw ): # write code here max_vol = 0 dp = [[0 for i in range(0, V + 1)] for i in range(0, n + 1)] print ("dp shape: ", len(dp), len(dp[0])) #init #dp[i][j] 代表第i个物品当前最大能装的重量 #process for i in range(1, n + 1): cur_w = vw[i - 1][0] for j in range(1, V + 1): if cur_w > j: dp[i][j] = dp[i - 1][j] else: #比较不拾取第i- 1个item和拾取的价值大小 dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - vw[i - 1][0]] + vw[i - 1][1]) return dp[n][V]