总结一下边界
- 求max/min的模型里:
- 求体积`恰好`为j:
- 求max, f = 【0】+【-inf】*t
- 求min, f = 【0】+【inf】*t
- 最终f【j】代表体积恰好为j时的价值极值。
---
- 求体积`至多`为j时:
- f【0】 = 【0】+【0】*t (max/min)
- 最终f【j】代表体积`至多`为j时的价值极值
---
- 求体积`至少`为j时:
- f【0】 = 【0】+【0】*t (max/min)
- 同时遍历体积需要修改循环下界v->0、转移需要修改为从max(0,j-v),即
`for j in range(self.vol, -1, -1):f【j】 = merge(f【j】, f【max(j - v,0)】 + w) # 01背包`
`for j in range(self.vol+1):f【j】 = merge(f【j】, f【max(j - v,0)】 + w) # 完全背包`
- 最终f【j】代表体积`至少`为j时的价值极值
---
- 求方案数的模型里(一般要取模):
- 求体积`恰好`为j:
- 求max, f = 【1】+【0】*t
- 最终f【j】代表体积恰好为j时的方案数。
---
- 求体积`至多`为j时:
- f = 【1】+【1】*t
- 最终f【j】代表体积`至多`为j时的方案数。
---
- 求体积`至少`为j时:
- f = 【1】+【0】*t
- 同时遍历体积需要修改循环下界v->0、转移需要修改为从max(0,j-v),即
`for j in range(self.vol, -1, -1):f【j】 += f【max(j - v,0)】 # 01背包`
`for j in range(self.vol+1):f【j】 += f【max(j - v,0)】 # 完全背包`
- 最终f【j】代表体积`至多少`为j时的方案数
背包问题边界总结
最新推荐文章于 2024-10-04 22:28:47 发布