假设我们有两个数字列表。一种称为权重,另一种称为值。它们的长度相同。我们还有两个值,分别称为容量和计数。这里weights [i]和values [i]代表第i个项目的权重和值。我们最多可以容纳最多重量,最多可以容纳总数,并且每个项目只能复制一份,因此我们必须找到可以获取的最大价值。
因此,如果输入像权重= [2,2,4,6] 值= [15,15,20,35] 容量= 8 count = 3,那么输出将是50,因为我们可以选择前3个项目,因为总重量为8。
让我们看下面的实现以更好地理解-
class Solution: def solve(self, weights, values, capacity, count): items = list(zip(weights, values)) def dp(i, cp, ct): if i == len(items) or ct == 0: return 0.0 w, v = items[i] ans = dp(i + 1, cp, ct) if cp >= w: ans = max(ans, dp(i + 1, cp - w, ct - 1) + v) return ans return int(dp(0, capacity, count)) ob = Solution() weights = [2, 2, 4, 6] values = [15, 15, 20, 35] capacity = 8 count = 3 print(ob.solve(weights, values, capacity, count))
[2, 2, 4, 6], [15, 15, 20, 35], 8, 3
输出结果
50