公式
- 背包问题的思考方向不是有多大的包要选哪些物品,而是腾出足够的大小放物品
dp[i][j] = max{dp[i-1][j-k*vi]+k*wi} 0<=k<=ni && k*vi<=j
vi,wi,ni分别是物品i的体积,价值和个数,j是当前背包的容积
- 展开第i个物体的公式:
dp[i][0] = dp[i-1][0]
dp[i][1] = dp[i-1][1]
...
dp[i][vi-1] = dp[i-1][vi-1]
//----------------------------------------------------------------------------
dp[i][vi] = max{
dp[i-1][vi], dp[i-1][0]+wi}
dp[i][vi+1] = max{
dp[i-1][vi+1], dp[i-1][1]+wi}
...
dp[i][2*vi-1] = max{
dp[i-1][2*vi-1], dp[i-1][vi-1]+wi}
//---------------------------------------------------------------------------
dp[i][2*vi] = max{
dp[i-1][2*vi], dp[i-1][vi]+wi, dp[i-1][0]+2*wi}
dp[i][2*vi+1]

本文介绍了如何使用动态规划和单调队列优化技术来解决完全背包问题,通过详细解析公式和伪代码,展示了如何在有限的空间内高效地计算背包能容纳的最大价值。动态规划思路是从物品的角度出发,优化过程中利用单调队列减少重复计算,从而提高算法效率。
最低0.47元/天 解锁文章
2266

被折叠的 条评论
为什么被折叠?



