谈谈我个人对于背包问题至多,至少和恰好的理解:
为了便于理解,使用f[i,j]表示前i个物品,容量j,01背包问题
所以我们就可以得出状态计算方程啦!
f[i,j]=?(f[i-1,j-v]+w,f[i-1,j])
至多:
这个时候问号是max,在更新的时候,我们要保证j-v大于零,为什么捏❓
实际上我们想看的是在容量为j-v的情况下,放进去v,最大不超过j。
如果j-v小于0,就是j小于v的情况下,本身v就已经比j大了,背包容量不可能小于0。
那么0+v=v必定比j要大,肯定放不进去,所以j小于v的情况都是不合法的。
至少:
这个时候问号是min,在更新的时候,j-v就可以小于零了,更奇怪了⁉
和至多的情况差不多,这次我们也看j-v<0的情况是否合法❗
当j小于v的情况下,我们的背包照样容量不可能小于0。但是0+v=v大于j这个状态是合法的
原因就在于状态定义,这个时候是至少,就是不小于j即可,上面至多是不大于j,所以不合法。
综上,我们还是需要在解决背包问题的时候考虑一下哪些状态是合法的,否则的话就等着WAWA大哭吧!
祝各位AC快乐🤭