【总结】背包问题的至多/恰好/至少
一、学习过程总结
一开始学背包问题时遇到的大多数的状态表示是:从前\(i\)个物品中选,且总体积至多是\(j\)的问题。
慢慢地在提高课中,就有出现状态表示是:从前\(i\)个物品中选,且总体积恰好是\(j\)的问题。例如 \(AcWing\) \(1023\). 买书 ,求的是恰好是\(j\)的总方案数问题。
同时还出现了状态表示是:从前\(i\)个物品中选,且总体积至少是\(j\)的问题。例如 \(AcWing\) \(1020\). 潜水员 ,求的是总体积至少是\(j\)的最小价值。
二、求方案数初始化总结
二维情况
-
体积至多\(j\) 【\(01\)+完全】
\(f[0][i] = 1\), \(0 <= i <= m\),其余是\(0\) 示例初始化解释:
用前\(0\)种物品,在小于\(i\)的空间内,方案数是\(1\),表示由于啥也不能选择,所以不管是哪个空间,都只能有一种方案,就是啥也不选。
-
体积恰好\(j\) 【\(01\)+完全】
\(f[i][0] = 1\), 其余是\(0\) 示例初始化解释:
在前\(i\)种物品中选择,恰好空间为\(0\)的方案数,只能是啥也不选。
-
体积至少\(j\) 【只\(01\)背包】
\(f[0][0] = 1\), 其余是\(0\) 示例初始化解释:
在前\(0\)种物品中选择,空间至少为\(0\)的方案数,只能是啥也不选
一维情况
- 体积至多\(j\), \(f[i] =1\), \(0 <= i <= m\) 示例
- 体积恰好\(j\), \(f[0] =1\), 其余是\(0\) 示例
- 体积至少\(j\), \(f[0] =1\), 其余是\(0\) 示例
三、求最大值最小值初始化总结
二维情况
-
体积至多\(j\) 【\(01\)+完全】
\(f[i,j] = 0\),\(0 <= i <= n, 0 <= j <= m\)( 只会求价值的最大值)示例 -
体积恰好\(j\):
当求价值的最小值:\(f[0][0] = 0\), 其余是\(INF\) 示例
当求价值的最大值:\(f[0][0] = 0\), 其余是\(-INF\) 示例 -
体积至少\(j\),\(f[0][0] = 0\),其余是\(INF\)(只会求价值的最小值) 示例
一维情况
- 体积至多\(j\),\(f[i] = 0, 0 <= i <= m\)( 只会求价值的最大值) 示例
- 体积恰好\(j\): 【\(01\)+完全】
- 体积至少\(j\),\(f[0] = 0\),其余是\(INF\)(只会求价值的最小值) 示例