问题:大盗潜入博物馆,面前有5件宝物,分别有重量和价值,大盗的背包仅能负重20公斤,请问如何选择宝物得到的总价值最高?
博物馆大盗问题
我们把这个问题记为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两者中的最大值,前者放不下最大宝物,后者能放。
公式
我们从m(1,1)开始计算到m(5,20)。可以画一个表格,如下:
动态规划表
由公式可知m(5,5)=m(4,5)=max( m(3,5),m(3,0)+8)
通过公式,我们可以把代码写出来,如下:
动态规划算法代码
当然我们也可以用递归的方法(通过备忘录)来解决博物馆大盗问题,就不要推导公式,代码也更简洁直观。代码如下:
递归代码










网友评论