再返回来看一维dp的倒序写法,由于先更新下标比较大的dp数组元素,此时通过状态转移方程求最大值的时候还未更新下标较小的dp数组元素, 即下标较小的dp数组元素还是上一层的值,因此倒序的方法可以使用! 至此,我们就能够全部理解为什么能用一维数组来解决0/1背包问题了。
int C,int w[],int v[]) { for(int i=1;i<=n;i++)//每一次外循环都会更新一维数组里的数据 { // 这里j要逆序因为如果正序遍历,则前面的值将有可能被修改掉从而造成后面数据的错误; 因 // 为后面的值是由前面的值构成的,可以自己打表来验证一下。