背包问题总结
来源:互联网 发布:java 微信授权 编辑:程序博客网 时间:2024/04/28 13:21
背包问题 (Knapsack problem x ) 有很多种版本,常见的是以下三种:
• 0-1 背包问题 (0-1 knapsack problem):每种物品只有一个
• 完全背包问题 (UKP, unbounded knapsack problem):每种物品都有无限个可用
• 多重背包问题 (BKP, bounded knapsack problem):第 i 种物品有 c[i] 个可用
• 0-1 背包问题 (0-1 knapsack problem):每种物品只有一个
• 完全背包问题 (UKP, unbounded knapsack problem):每种物品都有无限个可用
• 多重背包问题 (BKP, bounded knapsack problem):第 i 种物品有 c[i] 个可用
背包问题是一种“多阶段决策问题”。
定义状态 f[i][j],表示“把前 i 个物品装进容量为 j 的背包可以获得的最大价值”
0/1背包问题状态转移方程便是:
f[i][j] = max{f[i − 1][j],f[i − 1][j − w[i] + v[i]}
可以简化为:
d[j]=max{d[j],d[j-w[i]]+v[i]};
注意:遍历j时务必从右到左,因为d[j]只依赖于上一阶段的结果,从右到左避免覆盖上阶段有用结果
完全背包问题状态转移方程是:
f[i][j] = max{f[i − 1][j − k ∗ w[i]] + k ∗ v[i],0 ≤ k ∗ w[i] ≤ j}
可以简化为:
d[j] = max{d[j], d[j-k*w[i]] + k*v[i]}
注意:遍历j时务必从右到左,原因同上
多重背包问题状态转移方程是:
f[i][j] = max{f[i − 1][j − k ∗ w[i]] + k ∗ v[i],0 ≤ k ≤ c[i],0 ≤ k ∗ w[i] ≤ j}
可以简化为:
d[j] = max{d[j], d[j-k*w[i]] + k*v[i]}
注意:遍历j时务必从右到左,原因同上
0 0
- 01背包问题总结
- 背包问题求解总结
- 01背包问题总结
- 完全背包问题总结
- 背包问题总结一
- 背包问题总结二
- 背包问题总结
- 背包问题总结
- 背包问题总结
- 背包问题总结
- 01背包问题总结
- 背包问题总结
- 背包问题全总结
- 背包问题总结篇
- 背包问题总结
- 背包问题总结
- LintCode背包问题总结
- 背包问题总结
- uva11008 附
- android studio 查看 /data/data/ 目录资源
- MyBatis官方教程及源码解析——入门
- LeetCode 51 - N-Queens II
- 盲人可以玩的魔方
- 背包问题总结
- 组合和全排列
- Java中的静态绑定和动态绑定
- convertView和viewholder
- CALayer图层
- HDOJ 1507 Uncle Tom's Inherited Land*(二分图匹配+构图)
- Non-blocking user input in loop without ncurses.
- 观看《美人鱼》有感
- Hibernate学习——(四)Session及生命周期中的三种状态