现在有n个物品,每个物品有一个体积v[i]和重量g[i],选择其中总体积恰好为V的若干个物品,想使这若干个物品的总重量最大,求最大总重量为多少。(如果不存在合法方案,返回-1)
[1,2,3],[2,3,4],3
5
可以选择前两个物品,总体积为1+2=3恰好等于V,总重量为2+3=5,为符合题意选法中的最大重量
[1,3],[100,300],2
-1
只有一个体积为1的和一个体积为3的物品,无法选出总体积为2的若干物品,所以返回-1
给定三个参数,第一个参数为数组v,第二个参数为数组g,第三个参数为体积V,求最大总重量为多少。(所给字符串与返回字符串都不带引号)
class Solution: def Maximumweight(self , v , g , V ): # write code here nums = len(v) Matrix = [[0 for j in range(V+1)] for i in range(nums+1)] for i in range(1,nums+1): Matrix[i] = Matrix[i-1].copy() for j in range(1,V+1): volume = v[i-1] weight = g[i-1] if volume<=j: if Matrix[i-1][j-volume]!=0&nbs***bsp;j-volume==0: Matrix[i][j] = max(Matrix[i-1][j-volume]+weight,Matrix[i-1][j]) return Matrix[-1][-1] if Matrix[-1][-1]!=0 else -1超内存,只能使用遍历了。
class Solution: def Maximumweight(self , v , g , V ): n = len(v) gmax = -1 for i in range(1,1<<n): p, j, vsum, gsum = i, 0, 0, 0 while p: vsum += p%2 * v[j] gsum += p%2 * g[j] j += 1 p >>= 1 if vsum==V: gmax = max(gmax,gsum) return gmax通过