题目大意
http://acm.hdu.edu.cn/showproblem.php?pid=2602
0-1背包问题,本题的练习主要体会01背包的存储优化,由二维数组降至一维数组,因为每次dp[i][j]
总是依赖于dp[i-1][x]
因此不需要将所有dp[i][j]
的所有值都保存下来。
代码
|
|
注意此行for(int j = V; j >= volume[i]; j--)
一定要从V往小值的方向遍历,因为我们每次需要依赖上次保存的dp值,并且更新dp值,a和b的右侧dp值均是上次循环的dp值。如果for循环j从小值往大的方向遍历,那么小的dp[j]
的值先会被更新,那么大的j的值对应的dp值在更新时,如果依赖于下标小的dp值时,就不是上次循环的dp值,因此要从大往小遍历。