美文网首页
动态规划 0-1背包备忘

动态规划 0-1背包备忘

作者: 邦_ | 来源:发表于2022-08-23 16:19 被阅读0次

我也是经常忘= =。。写个备忘
有n件物品和一个容量为V的背包,第i件物品的重量是w[i],价值是v[i]。求解将哪些物品装入背包可使价值总和最大。
每种物品只有一件,可以选择放或者不放。
dp[i][j]表示前i件物品,j表示可以容纳的重量
dp[i][j] = max(dp[i - 1][j] ,dp[i][ j - w[i]] + v[i])

for i in 1..<n{
            
            for j in 0...W{
                
                if j<w[i] {
                    
                    dp[i][j] = dp[i - 1][j]
                    
                }else{
                    
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - w[i]] + v[i])
                
                }

 
            }
  
        }

二维转一维


for i in 1..<n{
            
            for j in stride(from: W, through: w[i], by: -1){
                    dp[j] = max(dp[j], dp[j - w[i]] + v[i])                
                }
            }
}

初始化
如果是恰好装满背包。。
那么dp[0] = 0 其他均为 负无穷大
如果不要求恰好装满背包,而是要求价值最大
那么需要初始化的时候将dp[0...n]全部初始化为0

为什么呢?可以这样理解:初始化的dp数组事实上就是在没有任何物品可以放入背包时的合法状态。
如果要求背包恰好装满,那么此时只有容量为0的背包可能被价值为0的nothing“恰好装满”,其它容量的背包均没有合法的解,属于未定义的状态,它们的值就都应该是-∞了。
如果背包并非必须被装满,那么任何容量的背包都有一个合法解“什么都不装”,这个解的价值为0,所以初始时状态的值也就全部为0了。

相关文章

  • 初识动态规划

    0-1 背包问题 备忘录 动态规划-二维数组 动态规划-一维数组 0-1 背包问题升级版 回溯算法 动态规划-二维...

  • 动态规划

    0-1背包问题 自己实现的0-1背包问题的动态规划解法,先贴上吧,动态规划原理解释有空再写。

  • 数据结构与算法笔记day23:动态规划

    1初识动态规划 这节课的内容不涉及动态规划的理论,而是通过两个例子:0-1背包问题、0-1背包问题升级...

  • 动态规划 0-1背包备忘

    我也是经常忘= =。。写个备忘有n件物品和一个容量为V的背包,第i件物品的重量是w[i],价值是v[i]。求解将哪...

  • Algorithm进阶计划 -- 动态规划(下)

    经典动态规划背包问题最长子序列问题 1. 背包问题 1.1 0-1 背包问题 0-1 背包问题,描述如下: 上面...

  • 算法-动态规划-背包问题

    背包问题是基础的动态规划问题,包含了0-1背包,完全背包,多重背包等。 0-1背包 存在容量为 的背包 , 件体...

  • lintcode-k数和

    动态规划(确定0-1背包、完全背包、多重背包)0-1背包:每个元素要么出现,要么不出现,逆序遍历,数组定义为:前i...

  • 背包问题

    背包问题属于典型的动态规划问题。这里我们将详细介绍0-1背包,完全背包和多重背包问题 一、 0-1背包 有N件物品...

  • 算法3:动态规划

    5.动态规划5.1 什么是动态规划?5.2 自底向上的动态规划:5.3 自顶向下的动态规划5.4 0-1背包问题:...

  • Algorithm

    bit manipulation 动态规划 0-1背包问题 寻找最小的k个数

网友评论

      本文标题:动态规划 0-1背包备忘

      本文链接:https://www.haomeiwen.com/subject/fkrggrtx.html