Python程序:求解背包中物品所能获得的最大价格
假设我们有两个数字列表。一个称为weights(重量),另一个称为values(价值)。它们的长度相同。我们还有两个值,capacity(容量)和count(数量)。其中weights[i]和values[i]分别表示第i个物品的重量和价值。我们最多可以容纳capacity重量的物品,并且最多可以携带count件物品。每个物品只能取一件,我们需要找到可以获得的最大价值。
例如,如果输入为weights = [2, 2, 4, 6],values = [15, 15, 20, 35],capacity = 8,count = 3,则输出为50,因为我们可以选择前3个物品,总重量为8。
为了解决这个问题,我们将遵循以下步骤:
items := 通过组合weights和values创建一个包含重量和价值对的列表
定义一个函数dp()。它将接收i, cp, ct作为参数
如果i等于items的长度或ct等于0,则
返回0.0
(w, v) := items[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
广告