在 Python 中找出我们可以将项目放入袋子中得到的最高价格的程序

在 Python 中找出我们可以将项目放入袋子中得到的最高价格的程序

假设我们有两个数字列表。 一个称为权重,另一个称为价值。 它们的长度相同,我们还有两个值称为容量和计数。 这里weights[i]和values[i]表示第i个项目的重量和价值。 我们最多可以容纳重量和项目数,而且每种项目只能拿一个,因此我们必须找到可以获得的最大价值。

因此,如果输入如下weights = [2, 2, 4, 6],values = [15, 15, 20, 35],capacity = 8,count = 3,则输出将为50,因为我们可以选择前三个项目,因为总重量是8。

为了解决此问题,我们将按照以下步骤操作 –

  • items:通过使用权重和价值形成的成对列表

  • 定义函数 dp()。这将采取i,cp,ct

  • 如果i与项目大小相同或ct与0相同,则

    • 返回 0.0
  • (w,v):=项[i]

  • ans:= dp(i + 1,cp,ct)

  • 如果cp> = w,则

    • ans:= ans的最大值,dp(i + 1,cp-w,ct-1) + v
  • 返回 ans

  • 从主方法返回 dp(0,capacity,count)

例子

让我们看一下以下实现,以更好地理解 –

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程