背包初始化细节

背包问题初始化的细节

  1. 刚开始是最简单的01背包,这个需要我们求的是从前i个物品里面选,体积不超过j的问题。
  2. 然后就是从i个物品里面选,体积恰好是j的一个方案。
  3. 同时还有从前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

一维情况:

就是去掉第一维初始化的时候.

参考下面的大佬的博客

posted @ 2022-12-20 10:38  努力的德华  阅读(67)  评论(0)    收藏  举报