hdu3466 Proud Merchants 变形01背包

来源:互联网 发布:埃迪·琼斯数据 编辑:程序博客网 时间:2024/06/07 12:04

很好的一道01背包题 好写超难想

首先为什么不是普通的01背包

5 10 5

3 5 6 

这两个物品观察先后顺序造成的结果 先买第一件 后买第二件 则需要的价值大于等于10+0=10即可  反过来 则需要10+3=13

这说明选一个物品是否加入背包和这个物品在所有物品中的访问次序有关联

所以只要解决物品的次序问题 就是普通01背包了

针对两个物品p1 q1 v1和p2 q2 v2 先决定买不买1再决定买不买2可以这样表示:需要的价值m1>=q1+p2 反过来则m2>=q2+p1

假如一种方案优 则m1<m2            q1+p2<q2+p1              移项q1-p1<q2-p2

也就是物品访问的优先级和q-p有关 这样再用01背包就过了


发表完看了别人的题解 还有个说法是:如果没有金钱的限制的话我们进行求解dp是肯定没有后效性的,但是有了金钱的限制之后完全就不一样了。要保证dp方程无后效性 j-p[i]一定要比j先算,那么当算i时,最小能算到q[i]-p[i],这样保证后面的可以用到前面的状态,因此以q[i]-p[i]排序即可保证无后效性。

0 0
原创粉丝点击