简单动态规划集(四)

来源:互联网 发布:淘宝如何报名天天特价 编辑:程序博客网 时间:2024/05/01 15:53

背包九讲是大牛的杰作,既然加了加了简单,那我只好简单说下背包前四讲

背包的第一讲01背包

它是最简单的背包,也是背包系列的根基,说是给一个背包,n件物品,每件有价值和费用c ,w

问你的背包最多能装多大的价值

for(i=V;i>=c[i];i--)

dp[i]=max(dp[i],dp[i-c[i]]+w[i]);

循环之所以从前往后是为了保证一件物品只装一次。

完全背包

给你的是n中物品,每种无限个

for(i=C[i];i<=V;i++)

dp=max(dp[i],dp[i]+w[i]);

这次是从前外后,是因为物品没有了个数限制,它的限制主要是背包的体积;

多重背包

给你的是n中物品,每种有限个限个

如果个数乘以体积大于等于背包体积用完全背包

否则用01背包,(在用01背包时,有个logn的优化)

混合背包

在我看来,他就是多重背包

这前四种背包其实,也就是01背包,完全背包。

学习动态规划背包九讲是份不错的材料,还有注意一个小细节,初始化问题,如果问是否能装满,除dp[0]初始化为0外,其余的全部初始化为负无穷。认真理解01背包和完全背包是学习背包九讲的基础。因为背包九讲很容易搜到,所以这里就不唠叨那么多了。