背包问题
Coddy 动态规划入门 课程的第 7 课,共 15 课。
背包问题是计算机科学中的经典优化问题。问题描述很简单:给定一组物品,每件物品都有重量和值,确定要放入背包的物品,使总重量小于或等于给定的限制,同时总价值最大。
背包问题有两种类型:
- 0/1 背包问题:在这种情况下,小偷不能只拿物品的一部分,只能拿走整件物品或不拿。
- 分数背包问题:在这种情况下,小偷可以只拿物品的一部分,也就是说,可以拿走物品的一部分。
挑战
中等编写一个名为 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 在线编译器