01背包问题重点分析(每个物品选择一次)

01背包问题的前提条件

每个物品只能选择一个;

物品必须按序进行决定,选或者不选;

dp[i][j]的含义

dp[i][j]表示当前可选物品为前i个物品,背包容量上限为j的条件下,能获得的最大价值;

状态转移算法(方程)

状态转移算法是指当可选物品范围增加到第i个物品时,当前条件下的dp[i][j]怎么计算?

(一)w[i]>j

表示当前第i个物品的容量大于所给的背包容量上限j,只能不选。

dp[i][j] = dp[i-1][j];

即:增加第i个可选物品时,容量为j的背包的最大价值等同于只有前(i-1)个可选物品时的最大容量!

(二)w[i]<=j

表示当前第i个物品的容量小于等于所给的背包容量上限j,可选可不选。

(1)不选,此时的背包最大价值:

dp[i][j] = dp[i-1][j]

与上一情况相同;

(2)选,此时背包首先装入第i个物品,价值增加v[i];同时背包还剩下容量j-w[i],这一剩余容量可以在前(i-1)个物品里选择,其最大价值为dp[i-1,j-w[i]]。因此此时的背包总价值

dp[i][j] = v[i]+dp[i-1][j-w[i]]

最终我们选取两种情况下价值最大的:

dp[i][j] = max{  dp[i-1][j]; v[i]+dp[i-1][j-w[i]]  }

打表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值