01背包的优化问题
Posted 不搞事情和咸鱼有什么区别
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了01背包的优化问题相关的知识,希望对你有一定的参考价值。
通过不断的去模拟代码的运行 对背包问题有了更深的理解 sum[i][j]=max(sum[i-1][j],sum[i-1][j-x[i]]+v[i]); 实际上就是数据的不断更新过程 在上一子问题的基础上 对该子问题每个空间大小能放的最多价值进行更新 然后使用于下一个子问题 由于每个子问题都是最优解 最终得到的解就是最优解
下午的背包刚入手 用的是二维数组 有一定程度的浪费空间
对于一个子问题的每个空间对应的最佳价值 可以通过从高位到地位逆序的写法(下一个子问题求每个空间大小的最佳价值要使用的是上一个子问题此时的空间大小以及小于此时空间大小的最佳值) 采用逆序的写法 即照顾了只需要上一个子问题状态不被覆盖 有起到了节省空间的作用
附上代码
for(int i=1;i<=n;i++)
{
for(int j=v;j>=weight[i];j--)
{
f[j]=max(f[j],f[j-weight[i]]+value[i]);
}
}
v为背包空间
以上是关于01背包的优化问题的主要内容,如果未能解决你的问题,请参考以下文章