0 1背包问题 01背包问题和普通背包区别( 二 )


22、一种区别这两种问法的实现方法是在初始化的时候有所不一样 。
23、假如是第一种问法,要求恰好装满背包,那么在初始化时除了f[0]为0其它f[1..V]均设为-∞,这样就可以保证最终得到的f[N]是一种恰好装满背包的最优解 。
24、假如并木有要求必须把背包装满,而是只期望价钱尽量大,初始化时应当将f[0..V]全部设为0 。
25、为啥呢?可以这样理解:初始化的f数组事实上就是在木有任何物品可以放入背包时的合法状态 。
26、假如要求背包恰好装满,那么此时仅有容量为0的背包可能被价值为0的nothing“恰好装满”,其它容量的背包均木有合法的解,属于未定义的状态,它们的值就都应当是-∞了 。
27、假如背包并非必须被装满,那么任何容量的背包都有1个合法解“啥都不装”,这个解的价值为0,因此初始时状态的值也就全部为0了 。
28、这个小技巧完全可以推广到其它类型的背包问题,后面也就不再对进行状态转移之前的初始化进行讲解 。
29、小结01背包问题是最基本的背包问题,它包含了背包问题中设计状态、方程的最基本思想,另外,别的类型的背包问题往往也可以转换成01背包问题求解 。
30、故一定要仔细体会上边基本思路的得出方法,状态转移方程的意义,以及最后怎样优化的空间复杂度 。
31、" 。
【0 1背包问题 01背包问题和普通背包区别】本文到此分享完毕,希望对大家有所帮助 。