背包问题初始化的细节
- 刚开始是最简单的01背包,这个需要我们求的是从前i个物品里面选,体积不超过j的问题。
- 然后就是从i个物品里面选,体积恰好是j的一个方案。
- 同时还有从前i个物品里面选,体积至少是的方案个数.
其实想这些问题的状态转移方程都是差不多的,唯一有区别的是初始化。
方案数初始化总结
二维情况:
- 体积至多是j, \(f[0[i]=1\),其余的就是0,下面来思考为什么需要这样的初始化呢,这个我们就需要根据我们的一个集合定义来出发了。我们的\(f[0][i]表示的是什么都不选然后提及不超过i\)。这很显然是一种方案.
- 体积恰好是j,\(f[0][0]=1,其余置为0\)
- 体积至少是j,\(f[0][0]=1\),其余为0.其实我们这里求方案数的置为0就是不存在的意思,这很明显啊因为我们什么都不选这个体积怎么可能大于或者等于j呢.
一维情况:
一维其实这就是把第一位去掉就好了.
求最大值和最小值的初始化总结
二维情况:
- 体积至多是j,\(f[i][k]=0\),注意这种情况下只会求价值的最大值.
- 体积恰好是J:
- 当求价值的最小值:\(f[0][0]=0\),其余是INF。
- 当求价值的最大值:\(f[0][0]=0\),其余是-INF;
- 体积至少是j,\(f[0][0]=0,其余是INF\).这种只会求最小值.
其实我认为最大值和最小值的初始化就是把我们合法的方案置为0,其实不合法的要看是最大值还是最小值,如果是最大值那就是-INF,最小值就是INF
一维情况:
就是去掉第一维初始化的时候.
标签:初始化,背包,最大值,最小值,细节,体积,INF From: https://www.cnblogs.com/xyh-hnust666/p/16993706.html