对于01背包
内循环是逆序
则
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
保证了每一次取的dp[j-w[i]]是选取前i-1个的最优解
对于完全背包
内循环是顺序
则
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
这里的dp[j-w[i]]已经被更新为前i个的最优解了
多重背包
内循环是顺序,然后在选取i个的里面,按照数量再展开
对于01背包
内循环是逆序
则
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
保证了每一次取的dp[j-w[i]]是选取前i-1个的最优解
对于完全背包
内循环是顺序
则
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
这里的dp[j-w[i]]已经被更新为前i个的最优解了
多重背包
内循环是顺序,然后在选取i个的里面,按照数量再展开