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 =' ')