约 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]。
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 开始会不会出错?
j=0
登录 后可看答案