背包问题详解
来源:互联网 发布:java注解是什么 编辑:程序博客网 时间:2024/04/30 21:17
01 背包
这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。
用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:
for i in range(0, n): for j in range(0,limit): if j >= w[i]: F[i][j] = max(F[i - 1][j], F[i - 1][j - w[i]] + v[i]) else: F[i][j] = F[i - 1][j]
可以改成滚动数组版本:
int flag = 0;for i in range(0, n): for j in range(0,limit): if j >= w[i]: F[flag^1][j] = max(F[flag][j], F[flag][j - w[i]] + v[i]) else: F[flag^1][j] = F[flag][j] flag^=1
还可以根据01背包每件物品只能放一次的性质,我们从大往小遍历背包容量:
for i in range(0, n): for j in range(limit, 0): if j >= w[i]: F[j] = max(F[j], F[j - w[i]] + v[i])
完全背包
0 0
- 背包问题详解
- 背包问题系列详解
- 背包问题详解
- 01背包问题详解
- 01背包问题详解
- 各种背包问题详解
- 背包问题详解
- 背包问题详解
- 01背包问题详解
- 背包问题 新手详解
- 背包问题详解:01背包、完全背包、多重背包
- 背包问题(0-1背包、完全背包、多重背包)详解
- 背包问题--完全背包 详解以及实现
- 背包问题系列算法详解
- 背包问题系列算法详解
- 0-1背包问题详解
- 0/1背包问题 详解
- 0-1背包问题详解
- Android NDK程序动态调试 初步尝试
- Java中的异常
- Thinkpad T460P I7 6820HQ版本运算以及显卡能力简单测试
- HTTPS工作原理和TCP握手机制
- GCD常用函数
- 背包问题详解
- xcode archive 一直是灰色的
- 最左原位
- 算法1
- Python语句(迭代及应用)
- activiti工作流
- Java8 default方法
- 63.内容提供者ContentProvider--系统内容提供者(获取短信)
- 读取Assets中的文件并写入数据库然后读出