0-1背包算法python实现
import numpy as np
def bag(n,value,weight):
'''
n 背包容量
value 价值数组
weight 重量数组'''
h = len(value)
arr = np.zeros((h+1,n+1), int)
for i in range(1,h+1):
for j in range(1,n+1):
if( weight[i-1]<=j ):
arr[i][j] = max( ((value[i-1]) + arr[i-1][j-weight[i-1]]), arr[i-1][j])
else:
arr[i][j] = arr[i-1][j]
return arr
def such(arr, weight, flag):
i,j = np.shape(arr)
if (i>0 and j>0 and len(weight)>=0):
if ((arr[i-1][j-1] > arr[i-2][j-1]) and (j-1 >= weight[i-2])):
flag.append(i-1)
such(arr[0:i-1 :,0:j-weight[i-2]], weight[:-1], flag)
else:
such(arr[0:i-1 :,], weight, flag)
return flag
a = []
value = [3,4,5,7]
weight = [2,3,5,6]
arr = bag(11,value,weight)
print("状态数组为:")
print(arr)
print("------------------------------------------------------------")
flag = such(arr,weight,a)
print("所取的物品编号为:",flag[::-1])