Menu
CoddyTech

背包问题

Coddy 动态规划入门 课程的第 7 课,共 15 课。

背包问题是计算机科学中的经典优化问题。问题描述很简单:给定一组物品,每件物品都有重量和值,确定要放入背包的物品,使总重量小于或等于给定的限制,同时总价值最大。

背包问题有两种类型:

  1. 0/1 背包问题:在这种情况下,小偷不能只拿物品的一部分,只能拿走整件物品或不拿。
  2. 分数背包问题:在这种情况下,小偷可以只拿物品的一部分,也就是说,可以拿走物品的一部分。
challenge icon

挑战

中等

编写一个名为 knapsack 的函数,用来解决 0/1 背包问题。该函数应接收 3 个输入:

  • 包含 n 件物品重量的列表(w1,w2,...,wn)。
  • 包含 n 件物品价值的列表(v1,v2,...,vn)。
  • 背包的最大承重(W)。

然后,函数应输出装入背包后可以达到的最大价值。

例如:

weights = [10, 20, 30]
values = [60, 100, 120]
W = 50
knapsack(weights, values, W)

输出:

220 # taking the 2 largest items

亲手试试

def knapsack(wrights, values, W):
    # 在这里编写代码

动态规划入门中的所有课

自己练习: Python 在线编译器