b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

基于动态编程算法的Python解决01背包问题的例子

电脑杂谈  发布时间:2020-04-11 15:31:42  来源:网络整理

动态规划法 01背包_01背包问题动态规划算法_0 1背包问题动态规划算法

本文介绍了Python如何基于动态编程算法解决01背包问题. 与您分享以供参考,如下:

动态规划法 01背包_01背包问题动态规划算法_0 1背包问题动态规划算法

在01背包问题中动态规划法 01背包,当选择是否向背包中添加项目时,将必须添加到该项目的子问题的解决方案与不占用该项目的子问题的解决方案进行比较. 该问题导致许多重叠的子问题,这些问题可以使用动态编程解决. n = 5是物品的数量,c = 10是书包可以承受的重量动态规划法 01背包,w = [2,2,6,5,4]是每个物品的重量,v = [6,3,5, 4,6]是每个项目的值,首先写出递归的定义:

01背包问题动态规划算法_0 1背包问题动态规划算法_动态规划法 01背包

动态规划法 01背包_01背包问题动态规划算法_0 1背包问题动态规划算法

然后从下至上,代码如下:

动态规划法 01背包_0 1背包问题动态规划算法_01背包问题动态规划算法

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]
  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(1,n+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,'个,',end='')
  print('')
if __name__=='__main__':
  n=5
  c=10
  w=[2,2,6,5,4]
  v=[6,3,5,4,6]
  res=bag(n,c,w,v)
  show(n,c,w,res)

输出如下:

更多对Python相关内容感兴趣的读者可以查看此站点的主题: “ Python数据结构和算法教程”,“ Python加密和解密算法和技能摘要”,“ Python代码操作技能摘要”,“ Python函数”用法”,“技巧摘要”,“ Python字符串操作技巧摘要”和“ Python入门和高级经典教程”

我希望本文对Python编程的每个人都有帮助.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-171912-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...