动态规划:完全背包 Java

本文探讨了完全背包问题,其中每种物品有无限件,目标是最大化背包价值。通过动态规划方法,建立了递推关系式Val[i][j] = max{Val[i-1][j-k*w[i]]+k*v[i]},并提供了优化点和Java代码实现,展示了如何计算最优解的过程。
摘要由CSDN通过智能技术生成

       完全背包问题是,有N种物品,体积为w,价值为v ,且每种物品都有无限件,那么,现在有体积为capacity的背包,怎么放物品每种物品放几件能使背包的价值Val最大。

        动态规划的重点是找到递推关系式,完全背包的递推关系式为:Val[i][j] = max{Val[i-1][j-k*w[i]]+k*v[i]} 0<=k*w[i]<=j , 即,当背包的剩余容量为 j 时,放入k件物品 i 的价值Val[i][j]。

上图为所选物品的体积和价值,背包剩余容量 j 和 背包价值Val存在这几种关系:一,当 j < k*w[i] (k=1)时 , 判断Val[i-1][j]和Val[i][j-1]的大小,Val[i][j]取大值 ; 二、当 j >= k*w[i]时,Val[i][j] = max{Val[i-1][j-k*w[i]]+k*v[i]} 0<=k*w[i]<=j;三、这里加一个优化点,当v[i]<v[i-1],w[i]>w[i-1]时,Val[i][j] = Val[i-1][j]。

递推开始:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值