Python动态背包问题,怎么解决

Python015

Python动态背包问题,怎么解决,第1张

def bag(n,c,w,v):  

  res=[[-1 for j in range(c+1)] for i in range(n+1)]  

  for j in range(c+1):  

    res[0][j]=0  

  for i in range(1,n+1):  

    for j in range(1,c+1):  

      res[i][j]=res[i-1][j]  

      if j>=w[i-1] and res[i][j]<res[i-1][j-w[i-1]]+v[i-1]:  

        res[i][j]=res[i-1][j-w[i-1]]+v[i-1]  

  print res  

  return res  

  

def show(n,c,w,res):  

  print '最大价值为:',res[n][c]  

  x=[False for i in range(n)]  

  j=c  

  for i in range(n,0,-1):  

    if res[i][j]>res[i-1][j]:  

       x[i-1]=True  

       j-=w[i-1]  

  print('选择的物品为:')  

  for i in range(n):  

    if x[i]:  

      print '第',i,'个,'  

  print('')  

  

if __name__=='__main__':  

  n=5  

  c=10  

  w=[2,2,6,5,4]  

  v=[6,3,5,7,6]  

  res=bag(n,c,w,v)  

  show(n,c,w,res)

输出:[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [-1, 0, 6, 6, 6, 6, 6, 6, 6, 6, 6], [-1, 0, 6, 6, 9, 9, 9, 9, 9, 9, 9], [-1, 0, 6, 6, 9, 9, 9, 9, 11, 11, 14], [-1, 0, 6, 6, 9, 9, 9, 13, 13, 16, 16], [-1, 0, 6, 6, 9, 9, 12, 13, 15, 16, 16]]

最大价值为: 16

选择的物品为:

第 0 个,

第 1 个,

第 3 个,

numpy是科学计算用的。主要是那个array,比较节约内存,而且矩阵运算方便。成为python科学计算的利器。matplotlib是用于可视化的。只先学会XY的散点图,再加一个柱状图就可以了。其它的都可以暂时不学。几句话就成了。不用找本书。找个例子代码看完就会了。这两个只是计算用的。与机器学习有点儿关联。但还不是机器学习。 机器学习算法你可以使用R project,那个函数库更多些。 你要肯下功夫啃代码,最慢1小时就能掌握 numpy和matplotlib。如果你觉着难,总是想绕圈圈,想容易些,就很难弄会它。也许几天才会。