Python 实现0-1背包

Posted 夜雨最萌

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 实现0-1背包相关的知识,希望对你有一定的参考价值。

代码:

import numpy as np
c=10             #背包容量
w=[2,2,6,5,4]    #物品重量
v=[5,3,5,4,6]     #物品价值
flag =[0,0,0,0,0]
m=np.zeros([5,11],int)           #用来保存 5x11的矩阵


for j in range(c+1):         #初始化第一行
    if(w[0]<=j):
        m[0][j]=v[0]
        flag[0] = 1
for i in range(1,5):
    for j in range(c+1):
        if (j<w[i]):
            m[i][j]=m[i-1][j]
        else:
            if(m[i-1][j-w[i]]+v[i]>m[i-1][j]):
                m[i][j] = m[i-1][j-w[i]]+v[i]
            else:
                m[i][j]=m[i-1][j]
print("最大价值为:",m[len(w)-1][c])

for i in range(4,0,-1):
    if(m[i][c]>m[i-1][c]):
        flag[i] = 1
        c = c -w[i]
    else:
        flag[i] = 0
print("选择的物品有:",end =  )
for i in range(len(flag)):
    if(flag[i]==1):
        print(i,end = )

 

以上是关于Python 实现0-1背包的主要内容,如果未能解决你的问题,请参考以下文章

0-1背包问题Python 蓝桥杯备战倒计时96天

动态规划算法实现部分——0/1背包问题

防止导航到同一个片段

java实现背包算法(0-1背包问题)

0-1背包问题之分支界限法

0-1背包问题的回溯法代码