簡體   English   中英

使用Dyanmic編程的背包無法給出正確答案

[英]Knapsack using Dyanmic Programming Fails to give correct answer

我用的是我在這個環節中發現的算法實現背包問題的片段背包問題

我之前在Stack Overflow上問過這個問題,我在從程序的return語句獲取輸出時遇到了問題。 您可以在此處檢查上一個問題

我也在這里也附上了算法的代碼片段。 背包算法

我為該算法編寫了以下python代碼段。 這里是:

def knapsack(v,w,n,W):
    V = [[None for x in range(W+1)] for x in range(len(v)+1)]
    keep = [[0 for x in range(W+1)] for x in range(len(v)+1)]
    # print keep

    for wy in range(W+1):
        V[0][wy] = 0

    for i in range(1,n+1):
        for wx in range(W+1):
            # print i,wx
            if w[i-1] <= wx:

                V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
                keep[i][wx] = 1
            else:
                V[i][wx] = V[i-1][wx]
                keep[i][wx] = 0
    K = W
    # print keep
    for i in range(n,0,-1):
        if keep[i][K] == 1:
            print i
            K = K - w[i-1]

    return V[n][W]

print knapsack(v = [10,40,30,50], w=[5,4,6,3],n=4,W=10)

我應該得到4,2作為我的值,但是得到4,3 請更正我要去的地方。

如果存在問題:

        if w[i-1] <= wx:

            V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
            keep[i][wx] = 1
        else:
            V[i][wx] = V[i-1][wx]
            keep[i][wx] = 0

如果(w[i-1] <= wx) and (v[i-1]+V[i-1][wx-w[i-1]] <= V[i-1][wx])是傻瓜

            V[i][wx] = max(V[i-1][wx], v[i-1]+V[i-1][wx-w[i-1]])
            keep[i][wx] = 1

但是你應該

            V[i][wx] = V[i-1][wx]
            keep[i][wx] = 0

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM