微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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 举报,一经查实,本站将立刻删除。