假设我们有两个列表,称为权重和值,它们的长度相同,而另一个称为容量k。这里weights [i]和values [i]表示第i个项目的权重和值。现在,我们最多可以获取k个容量权重,并且每个项目最多只能获取一个副本,我们必须找到可以获取的最大值。
因此,如果输入像权重= [2,3,4],值= [2,6,4],容量= 6,那么输出将是8
为了解决这个问题,我们将遵循以下步骤-
n:=重量的大小
dp:=容量为xn的矩阵,并用0填充
对于0到n范围内的i,执行
如果i等于0或j等于0,则
否则,当weights [i-1] <= j时,
除此以外,
dp [i,j]:= 0
dp [i,j] =(dp [i-1,j-weights [i-1]] + values [i-1])和(dp [i-1,j])的最大值
dp [i,j]:= dp [i-1,j]
对于范围为0至容量的j,执行
返回dp [n,容量]
让我们看下面的实现以更好地理解-
class Solution: def solve(self, weights, values, capacity): n=len(weights) dp=[[0 for i in range(capacity+1)] for _ in range(n+1)] for i in range(n+1): for j in range(capacity+1): if i==0 or j==0: dp[i][j]=0 elif weights[i-1]<=j: dp[i][j]=max(dp[i-1][j-weights[i-1]]+values[i-1],dp[i-1][j]) else: dp[i][j]=dp[i-1][j] return dp[n][capacity] ob = Solution() weights = [2, 3, 4] values = [2, 6, 4] capacity = 6 print(ob.solve(weights, values, capacity))
[2, 3, 4], [2, 6, 4], 6
输出结果
8