0/1 背包问题使用递归和记忆尝试打印 dp 数组的最终状态

问题描述

我正在使用递归和记忆法解决 0/1 背包问题。当我尝试打印 dp 数组的状态时,在递归调用完成后,我将所有值都作为 -1 而不是得到答案。

https://practice.geeksforgeeks.org/viewSol.php?subId=86a493880f46b0ed8f2d04007eb436aa&pid=701431&user=rockshivam999

输入:

3
4
1 2 3
4 5 1

输出

0 -1 -1 0 0 
-1 -1 -1 0 1 
-1 -1 -1 0 1 
-1 -1 -1 -1 3 

3

预期输出

0 0 0 0 0 
0 0 0 0 1 
0 0 0 0 1 
0 0 0 0 3 

3

输入:

3
4
1 2 3
4 5 1

输出

your output is: 
0 -1 -1 0 0 
-1 -1 -1 0 1 
-1 -1 -1 0 1 
-1 -1 -1 -1 3 

3

expecting output 

0 0 0 0 0 
0 0 0 0 1 
0 0 0 0 1 
0 0 0 0 3 

3
//code

int dp[1002][1002];

int hknapSack(int W,int wt[],int val[],int n) 
{ 
    
   if(W==0||n==0){
       return dp[n][W]=0;
   }else{
       if(dp[n][W]!=-1)return dp[n][W];
       if(W>=wt[n-1]){
           
           return  dp[n][W]= max( val[n-1] + hknapSack(W-wt[n-1],wt,val,n-1),hknapSack(W,n-1) );
       }else{
           return  dp[n][W]=hknapSack(W,n-1);
       }
   }
}

int knapSack(int W,int n) {
   
        memset(dp,-1,sizeof(dp));
        
        for(int i=0;i<=n;i++){
             for(int j=0;j<=W;j++){
            cout<<dp[i][j]<<" ";
        }
        cout<<"\n";
        }
        cout<<"\n";
     return  hknapSack(W,n);
    
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)