美文网首页
python:用动态规划算法来解决博物馆大盗问题

python:用动态规划算法来解决博物馆大盗问题

作者: 金融测试民工 | 来源:发表于2020-04-04 16:26 被阅读0次

    问题:大盗潜入博物馆,面前有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)

    通过公式,我们可以把代码写出来,如下:

动态规划算法代码

    当然我们也可以用递归的方法(通过备忘录)来解决博物馆大盗问题,就不要推导公式,代码也更简洁直观。代码如下:

递归代码

相关文章

网友评论

      本文标题:python:用动态规划算法来解决博物馆大盗问题

      本文链接:https://www.haomeiwen.com/subject/qsudphtx.html