栈的应用其二:背包问题
处理逻辑
knap(weight,n)
表示n件物品的重量- 若不选最后一件物品(重量为W(n-1)),
knap(weight,n-1)
的解即为knap(weight,n)
的解 - 若选择最后一件物品,若
knap(weight-W(n-1),n-1)
有解,其解加上最后一件物品就是kanp(weight,n)
的解,即前者有解后者也有解
- 若不选最后一件物品(重量为W(n-1)),
递归的考虑问题,n件物品的背包问题可归结为两个n-1件物品的背包问题:
几种最简单的情况
重量 | 解情况 |
---|---|
等于0 | 有解 |
小于0 | 无解 |
大于0且无物品可用 | 无解 |
代码
|
|
- 程序出自 《数据结构与算法Python语言描述》