01背包·写全

10 分钟

把转移写成双重循环即可:for(int i=1;i<=n;i++) for(int j=0;j<=W;j++){ dp[i][j]=dp[i-1][j]; if(j>=w[i]) dp[i][j]=max(dp[i][j], dp[i-1][j-w[i]]+v[i]); }。外层枚举物品,内层枚举容量,答案在 dp[n][W]

小纸条

内层循环从 j=0 开始会不会出错?

登录 后可看答案