该程序查找通过在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
    猜你喜欢