一个常数优化前面的伪代码中有for v=V..1,可以将这个循环的下限进行改进。 由于只需要最后dp[v]的值,倒推前一个物品,其实只要知道dp[v-w[n]]即可。以此类推,对以 第j个背包,其实只需要知道sumc[i->n](第i物品到最后一个物品的消耗和,因为前面的对结果没有影响)即可,即代码中的 1 for i -> 1 to N 2 do for v -> V to 0 3 do 可以改成: 1 for i -> 1 to n 2 do bound -> max(dp[V - sumc[i->n]], c[i]) // 《背包九讲》中这里笔误写错了。 3 for v -> V to bound 4 do 这对于V比较大时是有用的。 ----- 摘自《背包问题九讲v1.1》 一个常数优化前面的伪代码中有for v=V..1,可以将这个循环的下限进行改进。 由于只需要最