该程序查找通过在Python的能力范围内采用不同的项可以获得的最大金额
假设我们有两个列表,称为权重和值,它们的长度相同,而另一个称为容量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