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]代表放入这个物品的总价值,比较两者,选最大的。
如有疑问,欢迎评论指出!
化繁为简 大巧不工

浙公网安备 33010602011771号