国王的金矿:动态规划中 “01背包问题” 的空间优化
上一篇:国王的金矿 经典解法,使用二维数组
https://blog.csdn.net/weixin_44176696/article/details/104063272
观察经典状态转移方程
根据刻在DNA里的状态转移方程:
// cost[x] / value[x] 表示开第x座矿的需要的人手,价值
dp[i][j] = max(dp[i-1][j], dp[i-1][j-cost[i]]+value[i]);
在更新第 i 行(即求取使用 0~全部人 开采前 i 座金矿的最大收益)的时候发现
- 第 i 行的更新,只用到了第 i-1 行保存的计算结果
- 第 i 行 第 j 列的更新,只用到 第 i-1 行的前 j 列保存的结果
空间优化
由于第 i 行 第 j 列的更新,只用到 第 i-1 行的前 j 列保存的结果
我们可以 “倒着看”,来更新dp数组
- dp数组是一维数组
- 在第 i 次的主循环的更新中(即求取使用 0~全部人 开采前 i 座金矿的最大收益),dp[j] 表示: 使用 j 人开采 [ 前 i-1 ] 座金矿的最大收益 ,也就是前一次主循环更新的结果
故可以得到状态转移方程为:
dp[j](新)