动态规划初步认识之二

上次说到的问题是有一个箱子,和一堆东西,里面要放物品,物品有质量和空间和价格,箱子的容量和承载的质量也有限,问怎么能从这些物品中拿出一些物品放到箱子里,使拿出来的总价值最大。


这里我要说的是,这个问题多了一个变量。如果你没看过上一篇,建议你回去看一下,考过的就可以直接来看了。多了一个变量,问题就多了一点难度,不过,解决的问题的答题思想还是不变。


之前的是每次都拿出一个价值最大的物品,比如,这次拿出的是价格最大是物品,占用体积是2,原来箱子总体积是10,这回问题就变成了,当箱子体积是8的时候,除去刚才价格最大的那个物品,这个箱子能装总价值最大的物品组合,就这样以此类推。因为体积是不变的,所以问题就逐渐缩小成体积是6的箱子是4的是2的。。。。

  

现在体积变化了,那么解决问题的基本框架类似,但是细节不一样了,我们看下面的这个表格。

先说明一下这个表格,这是10x10的,就是看内容,先不看边上的东西,这是个10x10的,不要太较真。。

横着第一排,代表的是箱子的容量,从1-10,这个方法是要将箱子是1-10容量的所有最优情况都计算出来。

竖着左边的两列是物品的参数,有价格和体积。我们可以看到一共有10个物品,其实几个物品都行,我就是用10个来举例子。

物品的体积是不一样的,而且体积和价格没有什么关系,好,现在我们来解决问题。

这个表格我要往里面写数字,每个数字都代表价格的意思,从下到上,从左到右这么写。下面开始填写。


现在填写了一堆0,什么意思呢,用最左下角的0解释就是,当箱子容量是1的时候,只有那个体积是6价格是3这个一个物品时,箱子可以装的最大价格,显然,体积是6的东西往体积是1的箱子里放是不行的,那么这个情况的时候,最大价格是0。同样在这个格子基础上往上数一个格子,里面也是0,这个 格子的意思是,当箱子体积是1的时候,有体积是6价格是3和体积是6价格是4这两个物品时,箱子可以装的最大价值,显然,装不下,还是0。继续往下看。

这个表格就不解释了,按照上面的原理,应该能理解了。

下面接着看表格。这回数字多了。

为了方便看,我加了一些颜色,我们看这个问号的格子里填几?那就分析一下,现在这个格子的条件是,当箱子体积是4的时候,我们假定上面第一个物品是一号物品,当箱子体积是4时,从2-10号物品中往箱子里放东西,问怎么能使得总价格最大,然后我们把2号物品先放到箱子里,为什么要把2号物品放到箱子里,我们这样想,这个问题的上一个问题是,有3号物品到10号物品,箱子的体积是4,这时最大价值是5,先现在的这个问题是,其他条件都没变,多了一个物品,就是2号物品,那么这总价值是否能因为2号物品而改变,所以我们得试试才知道,所以就直接把2号物品先放到箱子里,这时箱子里有的价值是3,体积减1,因为装了2号物品了,然后问题就变成了,当箱子体积是3的时候,有物品3-10号,那么此时箱子可以装的最大价值是多少,格子里写了,是4,格子在哪里,我们在箱子体积是3那列找就有(根据前面讲的,这个格子应该能找到),那么把这个4和之前装的2号物品的价格加起来,是6,那么之这个格子就填6,但是这个之前有个比较过程,就说我说的上一个问题,需要和上一个问题比较,上一个问题是箱子体积为4,有物品3-10号的时候,这时最大价值是5。然后加入2号物品了,这时问题就变成了问号这个格子了,然后把2物品放到箱子里,看箱子的总价值会不会因为物品2的加入而变大,要是变大了就写变大后的值,刚刚算了是6,要是小于等于,说明2号物品的加入没有对之前只有3-10号物品时的总价值造成影响,说明二号物品此时加入不影响之前的结果,那么久继续保持之前的结果,就是问号下面的格子的数字是5。所以,这个格子里填6。


其实到这里我们不难发现,这个问题的解决方法就是把整个问题的最小的子问题首先解决,然后再用这些已经解决的子问题去解决后面的问题,也就是用子问题组合出了后面的问题。其实这个就是动态规划的思想,我们不要被这个表格禁锢住思想,我用个表格就是为了方便理解和看,这个只是这个问题的表象解决方法,而这个问题的内在解法就是写出所有子问题,再用子问题去解决总问题,每个子问题就是一种状态,或者说像是一个节点一样,换到这个问题来说,无非就是这个物品是不是要放到这个箱子里,放进去就相当于路过这个节点,不放进去就好像是跳过个这节点。


那么我们在看看下面的表格,再来理解一下是不是理解了这个问题的解决方法。



问号的格子,此时状态是当箱子体积是6的时候,这时候,有1-10号这些物品,因为这个状态的上一个状态是当箱子体积是6的时候有2-10号物品,现在多了1号物品,那么我们看一看多了的这个一号物品是不是会对这个最大价格产生影响,怎么看呢,先把一号物品放到箱子里,此时,箱子的体积减一,因为放了一号物品,这时,状态变成了箱子的体积是5的时候,有2-10号物品,从这些物品中往箱子里装,怎么能使得总价值最大,然后我们看表格,我已经标出这个状态的位置,格子里面是8,然后,用8加上1号物品的价格,是12,那么现在总价值是12,就说明当箱子体积是6的时候,有1-10号物品,这些物品往箱子里装,最大总价值是12,比上一个状态的总价值9要大,这就说明,说明1号物品的加入有了效果,那么这个问号的格子里就填12。


如果前面这些你都理解了,那么后面的格子你就会填了,最后就会求出当箱子体积是10的时候,有1-10号物品,装入的物品的总价格最大是多少了。


那么物体又来了,当箱子体积是10,最大承载质量是10,每个物体的体积,质量,价格都不同,问箱子里能装的最大总价值是多少?有兴趣的可以试一试,下一篇博客会讲此问题,因为我也要研究一些,其实道理都相同。上面的额格子我可能有算错的,也可能没有,如果在你阅读的时候发现,请不要在意。


这次就到这里,谢谢阅读。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值