动态规划-背包问题

问题描述:the Knapsack Problem

给定n个物品,重量是{w1,...,wn},价值是{v1,...,vn},包的容量(承重)是W

问,放入哪些物品能使得包内价值最大;


思路:运用动态规划思想

1 需要将问题转化为子问题,通过递归实现,且子问题必然与父问题存在关联

2 定义V[i,j] 表示为,当item取自前i个items且背包capacity=j 时,背包问题的最优解,也即最高的价值

3 从前i个items中,选择任意一个组合的情况,可分成两个子集,一种即包含第i个item的集合,一种即不包含第i个item的集合;我们的最优解,即可从这两个子集的最优解中比较而得出;

4  无第i个item的最优解,同时capacity=j,自然是V[i-1,j],根据定义可知并不包含第i个item;

5  包含第i个item的最优解,同时capacity=j ,就是在前 i-1 个items的情况下且capacity=j-wi 的最优解(价值)第i个item(价值),用字母表示为 vi+V[i-1,j-wi]

6  为了使算法更全面,考虑一种情况,j-wi<0 ,下标会越界,

7 考虑初始状况,V[0,j]=0 for j>=0 ,V[i,0]=0 for i>=0







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值