如何解决0/1 背包问题使用递归和记忆尝试打印 dp 数组的最终状态
我正在使用递归和记忆法解决 0/1 背包问题。当我尝试打印 dp
数组的状态时,在递归调用完成后,我将所有值都作为 -1
而不是得到答案。
输入:
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 举报,一经查实,本站将立刻删除。