0-1 Knapsack C++ 没有返回正确的值

0-1 Knapsack C++ not returning proper value

#include<bits/stdc++.h>
using namespace std;

int knapsackTab(int val[],int wt[], int W, int n)
{
    int dp[n+1][W+1];

    for(int i=0;i<n+1;i++){
        for(int j=0;j<W+1;j++){
            if(i==0||j==0)
                dp[i][j]=0;

            if(wt[i-1]<=j)
                dp[i][j] = max(val[i-1] + dp[i-1][j-wt[i-1]],dp[i-1][j]);
            else
                dp[i][j] = dp[i-1][j];
        }
    }
    return dp[n][W];
}
int main()
{
    int val[] = { 10, 20, 30 };
    int wt[] = { 1, 1, 1 };
    int W = 2;
    int n = sizeof(val) / sizeof(val[0]);
    cout<<knapsackTab(val,wt,W,n);
}

输出是一个巨大的数字。我认为它是垃圾值。 预期输出:50

请帮助我并告诉我我可能在哪里犯了错误

您在 i==0||j==0 检查后忘记了 else,因此读取了超出范围的值。

            if(i==0||j==0)
                dp[i][j]=0;

            else if(wt[i-1]<=j) // add "else" here
                dp[i][j] = max(val[i-1] + dp[i-1][j-wt[i-1]],dp[i-1][j]);
            else
                dp[i][j] = dp[i-1][j];