为什么会这样

P1048 [NOIP2005 普及组] 采药

这是01背包,需要倒序枚举
by Telesto @ 2020-01-15 15:04:53


如果正序枚举会出现以下现象: 1 2 3 4 5 6 7 8 9 0 0 0 0 0 0 0 0 0 这是现在的dp数组 如果接下来我们加入一个价值为3,容量为4的物品呢? 1 2 3 4 5 6 7 8 9 0 0 0 3 3 3 3 ?? 前7是正常的因为他们读取的状态为没有加入该物品时的状态。 但是第8要读取8-4=4,第4个值,也就是3,已经在该层修改过的状态。 这样就会导致一个物品被重复使用。
by Telesto @ 2020-01-15 15:09:50


而倒序枚举并不会使用当层的状态: 因为i-w是它所调用的状态 如果正序遍历,那么因为i肯定比i-w大,所以i-w肯定比i遍历到的时间要靠前,这一个物品就已经在i-w时选用了 而倒序遍历,那么因为i肯定比i-w大,所以i-w肯定比i遍历到的时间要靠后,这一个物品就一定不会在i-w时使用
by Telesto @ 2020-01-15 15:14:20


我建议你去找专门介绍背包问题的博客看 我太菜了,讲得不好
by Telesto @ 2020-01-15 15:14:56


吃瓜群众(连滚带爬光速逃)
by LINKIN_PARK @ 2020-01-15 15:36:47


@[CorCor_corvus](/user/176596) 替我同学感谢你!
by Rairn @ 2020-01-20 18:19:22


|