问题:大盗潜入博物馆,面前有5件宝物,分别有重量和价值,大盗的背包仅能负重20公斤,请问如何选择宝物得到的总价值最高?
![](https://img.haomeiwen.com/i1645208/95c21043efe12770.png)
我们把这个问题记为m(i,W)函数,其中i为宝物,W为重量,v为价值:前i(1<=i<=5)个宝物中,组合不超过W(1<=i<=20)重量,得到最大价值
m(i,W)应该是m(i-1,W)和m(i-1,W-Wi)+vi两者中的最大值,前者放不下最大宝物,后者能放。
![](https://img.haomeiwen.com/i1645208/aab0dbb6a5389df7.png)
我们从m(1,1)开始计算到m(5,20)。可以画一个表格,如下:
![](https://img.haomeiwen.com/i1645208/f58d84f0abf6232a.png)
由公式可知m(5,5)=m(4,5)=max( m(3,5),m(3,0)+8)
通过公式,我们可以把代码写出来,如下:
![](https://img.haomeiwen.com/i1645208/7ae6294ca15969b2.png)
当然我们也可以用递归的方法(通过备忘录)来解决博物馆大盗问题,就不要推导公式,代码也更简洁直观。代码如下:
![](https://img.haomeiwen.com/i1645208/e22a2da146732cbf.png)
网友评论