背包问题

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 = int(input("物品的数量:"))
    c = int(input("书包的承受量:"))
    w = [2, 2, 6, 5, 4]  #每个物品的重量
    v = [6, 3, 5, 4, 6]  #每个物品的价值
    n = len(w)           #物品的数量
    res = bag(n, c, w, v)
    show(n, c, w, res)
原文地址:https://www.cnblogs.com/cn-gzb/p/9788214.html