算法导论.动态规划.0/1背包问题

0.问题描述

给定n种物品和一个背包,物品i的重量是wi,价值vi, 背包承重为C, 问如何选择装入背包的物品,使装入背包中的物品的总价值最大?

对于每种物品只能选择完全装入或不装入,一个物品至多装入一次。

在这里插入图片描述

1.问题分析

每个分叉都代表装入或不装入某个物品
在这里插入图片描述

2.思想

2.1 mainidea:运用动态规划求解问题就得把子问题的解记录下来,二该问题中的情况就是每个物品在/不在背包中的组合。把n个物品的大问题划分成n-i+1个物品存在/不存在的组合记录下来。弄一个C*n的矩阵来记录,问题可解
TIPS1 : 下式中 j 表示剩余的容量!
TIPS2 : 下式:比较加入不加入该物品和加入该物品后的 i+1到n个物品和新对应的剩余容量之间的最优解的大小
在这里插入图片描述
TIPS3 : 问题中的C必须是整数,因为矩阵中存储的C是以1为单位变化的,如果是小数则多项式时间内不可解
把第n个物品移过项到另一侧了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.伪代码

在这里插入图片描述

4.复杂性分析

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41359808/article/details/88694082