Menu
CoddyTech

0/1 Knapsack Problem

中等动态规划python iconjava iconcpp iconc iconjs icon+10

你有 n 件物品。第 i 件物品的重量为 weights[i],价值为 values[i]。你的背包最多能装 capacity 重量的物品。每件物品只有一件,你要么将它整件装入背包,要么不装。返回你能装入背包的最大总价值。

函数

knapsack(weights: integer-array, values: integer-array, capacity: integer) → integer
weightsinteger-array
每个项目的权重
valuesinteger-array
每个项目的值
capacityinteger
背包最多能承载的重量
返回值integer
在不超过容量的情况下,物品的最大总价值

约束条件

  • 1 ≤ n ≤ 100,其中 n = weights.length = values.length
  • 1 ≤ weights[i] ≤ 1000
  • 1 ≤ values[i] ≤ 104
  • 1 ≤ capacity ≤ 1000

示例

输入
weights = [4, 2, 3, 5]values = [10, 4, 7, 12]capacity = 7
输出
17
解释
物品 0 和 2 的重量为 4 + 3 = 7,价值为 10 + 7 = 17。先装入价值最高的物品(重量为 5,价值为 12)后,只剩下装入物品 1 的空间,总价值为 16。
challenge icon

进阶

假设容量可以达到 10^9,而数值总和最多为 10^4。你会用什么作为表的索引?

重置代码
def knapsack(weights, values, capacity):
    # 在这里编写代码

测试 #1

测试 #2

测试 #3

参数

weights = [4, 2, 3, 5]
values = [10, 4, 7, 12]
capacity = 7

预期输出

17