栈的应用其二:背包问题
处理逻辑
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语言描述》