概念
超大背包问题是指物品数量 较小(通常 )但背包容量 极大(如 )的 0-1 背包问题。此时标准的 DP 无法在时间和空间上承受,需要使用折半搜索(Meet in the Middle)等技巧。
核心思想
折半搜索(Meet in the Middle)
将 个物品分成两半(各约 个),分别枚举每一半的所有子集组合(每半最多 种),记录每种选法的总重量和总价值。
- 前半部分:枚举所有 种子集,记录 (总重量, 总价值) 对。
- 后半部分:同样枚举所有 种子集。
- 合并:对前半部分按重量排序,对后半部分的每种选法,在前半部分中二分查找剩余容量内价值最大的组合。
合并前需要对前半部分做预处理:按重量排序后,去除被”支配”的方案(即重量更大但价值不更高的方案),使得价值随重量单调递增,从而可以高效二分。
时间复杂度
相比暴力枚举全部子集的 ,折半搜索将指数减半。
适用场景
- 物品数量少()但容量极大的 0-1 背包
- 无法用常规 DP 处理的大值域背包问题
- 其他需要折半枚举 + 合并的搜索问题