在 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