背包问题(Knapsack Problem)是一类经典的组合优化问题,广泛应用于资源分配、投资决策、货物装载等领域。根据约束条件和问题设定的不同,背包问题主要分为以下几种类型:
1. 0-1 背包问题(0-1 Knapsack Problem)
- 问题描述:给定 n 个物品,每个物品有重量 wi 和价值 vi,以及一个容量为 W 的背包。每个物品只能选择 放入或不放入 背包,求如何选择物品使得总价值最大且总重量不超过 W。
- 特点:每个物品只能选择一次。
- 应用场景:资源分配、投资组合选择等。
- 解决的问题:在资源有限(背包容量有限)的情况下,对具有不同价值和重量的物品进行选择,以达到价值最大化的决策问题。例如,在一次旅行中,旅行者的背包容量有限,需要从各种不同重量和价值的物品中选择携带哪些物品,以在不超过背包容量的前提下,使携带物品的总价值最高。
2. 完全背包问题(Unbounded Knapsack Problem)
- 问题描述:与 0-1 背包问题类似,但每个物品可以 无限次 放入背包。
- 特点:物品数量无限。
- 应用场景:货币找零问题(如使用最少数量的硬币凑