完美解决背包问题:01背包、彻底背包

01背包
每种物品就有一个get

C = [3,2,6,7,1,4,9,5]#cost 单个物品所占容量
V = [6,3,5,8,3,1,6,9]#每一个物品的价值
target = 15 #背包容量
F = [0 for i in range(0,target+1)] #初始化 元素个数为背包大小加1(target+1)
n = len(C)sed

def ZeroOneBackPack(cost,value):
    for i in reversed(range(cost,target+1)): #逆序遍历
        F[i] = max(F[i],F[i-cost]+value)遍历

for i in range(0,n):
    ZeroOneBackPack(C[i],V[i])
print (F[target])co


彻底背包
每种物品有无数多个let

C = [3,2,6,7,1,4,9,5]
V = [6,3,5,8,3,1,6,9]
target = 15
F = [0 for i in range(0,target+1)]
n = len(C)tar

def CompleteBackPack(cost,value):
    for i in range(cost,target+1):#这是和01背包惟一的区别 正序遍历
        F[i] = max(F[i],F[i-cost]+value)

for i in range(0,n):     CompleteBackPack(C[i],V[i]) print (F[target])