背包模板
01背包
取或不取 保证只选一次 倒序枚举剩余空间
for (int i=1;i<=n;i++) for (int j=v;j>=c[i];j--) dp[j]=max(dp[j],dp[j-c[i]]+w[i]);完全背包
可取无限次 正序枚举剩余空间
for (int i=1;i<=n;i++) for (int j=c[i];j<=v;j++) dp[j]=max(dp[j],dp[j-c[i]]+w[i]);
多重背包
某件物品可取k次 倒序枚举剩余空间
for (int i=1;i<=n;i++) for (int j=v;j>=c[i];j--) for (int l=1;l<=k[i];l++) dp[j]=max(dp[j],dp[j-l*c[i]]+l*w[i]);
以上的算法皆是时间空间复杂度最低的算法