01背包问题-Python

#coding:utf-8

def bage(n, v):

    # w = [0, 3, 4, 5]
    # c = [4, 5, 6]
    w = [0, 2, 3, 5, 5]
    c = [0, 2, 4, 3, 7]

    dp = [[0] * (v + 1) for _ in range(n + 1)]

 
    for i in range(1, n + 1):
        for j in range(1, v + 1):
            if j >= w[i]:
                dp[i][j] = max(dp[i - 1][j], dp[i - 1][j - w[i]] + c[i])
            else:
                dp[i][j] = dp[i - 1][j]

    print(dp)

bage(4, 10)

# output:

[
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
[0, 0, 2, 2, 2, 2, 2, 2, 2, 2, 2], 
[0, 0, 2, 4, 4, 6, 6, 6, 6, 6, 6],
[0, 0, 2, 4, 4, 6, 6, 6, 7, 7, 9], 
[0, 0, 2, 4, 4, 7, 7, 9, 11, 11, 13]
]

思路参考:

https://www.cnblogs.com/mfrank/p/10533701.html

https://blog.csdn.net/oYueYang1/article/details/78211218

猜你喜欢

转载自blog.csdn.net/sinat_21791203/article/details/108348655