01背包基本模板

01背包问题概论:

给定n种物品和一个容量为V的背包,物品的体积为vi,其价值为vali。

问:应该如何装入背包的物品才能使装入背包物品的总价值最大?

策略:

这种问题有两种决策,拿与不拿,以代码的形式可化为:

for(int i = 1; i <= n; ++i)
        for(int j = v, j >= v[i]; --j)
        {
            dp[j] = max(dp[j], dp[ j-v[i] ]+val[i]);
        }

其中未知量代表: n -- 物品个数,vi -- 物品的体积,dpi -- 总价值,v -- 总体积。

代码的思想就是:dp[j]代表不放入第i个物品的总价值,dp[ j-v[i]  ]+val[i]代表放入这个物品的总价值,比较两者,选最大的。

如有疑问,欢迎评论指出!

posted @ 2019-01-27 11:07  mpeter  阅读(102)  评论(0)    收藏  举报