背包问题

01背包

二维数组可以优化成一维数组,V倒序

因为f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}变成

for i=1..N
    for v=V..0
        f[v]=max{f[v],f[v-c[i]]+w[i]};

这里大V由小的V得出,不先算出来大的,先算小的话,将来算大的用到的小的,是被更新过的f[i]不是f[i-1]

01背包初始化

要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解。

如果并没有要求必须把背包装满,而是只希望价格尽量大,初始化时应该将f[0..V]全部设为0。

Last updated