[Python] python 解决0-1背包问题算法 →→→→→进入此内容的聊天室

来自 , 2019-04-05, 写在 Python, 查看 130 次.
URL http://www.code666.cn/view/44885837
  1. #!/usr/bin/python
  2. # -*- coding: utf8 -*-
  3. '''
  4. Created on 2011-10-24
  5.  
  6. @author: AHAN
  7. python 2.7.2
  8. '''
  9.  
  10. #n个物体的重量(w[0]无用)
  11. w = [0, 2, 2, 6, 5, 4]
  12. #n个物体的价值(p[0]无用)
  13. p = [0, 6, 3, 5, 4, 6]
  14. #计算n的个数
  15. n = len(w) - 1
  16. #背包的载重量
  17. m = 10
  18. #装入背包的物体,元素为True时,对应物体被装入(x[0]无用)
  19. x = [False for raw in range(n + 1)]
  20. v = 0
  21. #optp[i][j]表示在前i个物体中,能够装入载重量为j的背包中的物体的最大价值
  22. optp = [[0 for col in range(m + 1)] for raw in range(n + 1)]
  23.  
  24. def knapsack_dynamic(w, p, n, m, x):
  25.     #计算optp[i][j]
  26.     for i in range(1, n + 1):
  27.         for j in range(1, m + 1):
  28.             optp[i][j] = optp[i - 1][j]
  29.             if (j >= w[i]) and (optp[i - 1][j - w[i]] + p[i] > optp[i - 1][j]):
  30.                 optp[i][j] = optp[i - 1][j - w[i]] + p[i]
  31.      
  32.     #递推装入背包的物体
  33.     j = m
  34.     for i in range(n, 0, -1):
  35.         if optp[i][j] > optp[i - 1][j]:
  36.             x[i] = True
  37.             j = j - w[i]  
  38.      
  39.     #返回最大价值
  40.     v = optp[n][m]
  41.     return v
  42.  
  43. print('最大值为:' + str(knapsack_dynamic(w, p, n, m, x)))
  44. print(x[1:])
  45. #//python/7202

回复 "python 解决0-1背包问题算法"

这儿你可以回复上面这条便签

captcha