0_1揹包問題動態規劃方法求解python代碼

0_1揹包問題動態規劃方法求解python代碼

遞推公式

在這裏插入圖片描述

def Bag(n, W, V, C):
    C = int(C)  # 容量C
    n = int(n)  # 物品個數
    w = W.split(',')
    w = [int(i) for i in w]  # 物品重量數組
    v = V.split(',')
    v = [int(i) for i in v]  # 物品價值數組
    #行爲物品個數,列爲揹包容量
    bagTable = [[0 for j in range(C + 1)] for i in range(n + 1)]
    # 添加代碼區開始
    for key_n in range(1,len(bagTable)):
        for key_c in range(1,len(bagTable[key_n])):
            #當前商品重量大於當前揹包重量
            if w[key_n-1] > key_c:
                bagTable[key_n][key_c] = bagTable[key_n-1][key_c]
            else:
                #如果放揹包裏,等於只放key_n-1個物品時,並且揹包容量爲key_c-W[key_n]時的價值加上當前的物品價值
                value1 = bagTable[key_n-1][key_c-w[key_n-1]] + v[key_n-1]
                #如果不放在揹包裏
                value2 = bagTable[key_n-1][key_c]
                bagTable[key_n][key_c] = max(value1,value2)

    # 添加代碼區結束

    for i in range(len(bagTable)):
        print(bagTable[i])
    return bagTable


if __name__ == '__main__':
    inputlist = str(input()).split('-')
    n = inputlist[0]
    W = inputlist[1]
    V = inputlist[2]
    C = inputlist[3]
    Bag(n, W, V, C)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章