0-1背包问题(JAVA实现)

小明明今天搬家,家中只有5件值钱玩意,重量分别为2斤、1斤、3斤、2斤、4斤,价值分别为12元、10元、20元、15元、14元。即化成重量数组为:W{2,1,3,2,4}和价值数组为:V{12,10,20,15,14}。家里祖传的破三轮只能一次载6斤东西,问:小明明怎样安排值钱玩意的装载,才能使第一次装载就收获最大价值,求出最大价值?

方法一:使用二维数组建立动态方程。

代码如下:
在这里插入图片描述算法主要思想分析:该算法主要采用的是动态规划思想。
对于关键代码:
在这里插入图片描述即先把数组下标较大的那个玩意不予考虑,直接将上一次的最优结果赋予这次,然后用max函数来比较考虑数组下标较大的玩意与上一次的最优结果,取其之间的最大值。
结果图:
在这里插入图片描述右下角45即为结果。
通俗的理解:首先把dp[3][6]赋予dp[4][6]=45,这是不考虑把5号玩意(对应数组下标为4)装上破三轮的情况。接下来考虑把5号玩意装上,因为5号玩意重4斤价值为14元,则破三轮还能再装2斤,就找对应数字为2的那一列的
最大值为15,又因为14+15=29<45,即结果为45元。
在这里插入图片描述
方法二:使用一维数组建立动态方程。

代码如下:
在这里插入图片描述关键代码:
在这里插入图片描述即用for循环来一行行更新最优解。最后返回dp[c]即dp[6]=45为最终答案。

综上所述:最好自己按照代码画出表格,一步一步来体验小明明的搬家乐趣。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W明Z帝M

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值