动态规划(DP)---背包二维图

这篇具有很好参考价值的文章主要介绍了动态规划(DP)---背包二维图。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

状态方程:dp[i][j] = max(dp[i - 1][j],dp[i - 1][j - w[i]] + v[i])

应该是看完我写的DP文章来的吧,如果没有看到,希望看看DP那个文章结合这个理解,DP那个文章内部写了我对于01背包类型的想法与思路,有时间的网友可以了解hhh。

分析这个东东的时候,其实是四个方向嘛,我推荐要是理解这个东西,从第一个物品开始枚举,从背包正好没有空间开始。

我就假设一下吧,背包容量为8

               体积      价值

第一个       2           3

第二个       3           4

第三个       4           5

第四个       5           6

分析状态方程,我比较喜欢给他拆成独立的个体,也就是每行为一个整体,开始分析第一个物品,第一个物品放入的开始应该是 j = 2,这个时候背包正好装满,然后到j = 3,这时的背包剩出一个空间,然后j = 4 以此类推到最后j = 8,这个第一行存储的是最开始咱们枚举第一个物品且只能放一个的最大金额;然后枚举第二个物品,在这种情况,我们要注意这里比较的时候跟上面比较不一样,上面是与0比较金额,而这里咱们从j = 3开始,这个时候应该塞进第二个物品,因为这个时候会跟第一个比较因为4 > 3所以要二而不要一,然后j = 4,这个时候会跟第一个比较以此类推.....

dp[1][2] = max(dp[0][2],dp[0][0] + 3)

dp[1][3] = max(dp[0][3],dp[0][1] + 3)

dp[1][4] = max(dp[0][4],dp[0][2] + 3)

dp[1][5] = max(dp[0][5],dp[0][3] + 3)........

---------------------------------------------------

dp[2][3] = max(dp[1][2],dp[1][0] + 4)

dp[2][4] = max(dp[1][4],dp[1][1] + 4)

dp[2][5] = max(dp[1][5],dp[1][2] + 4)

dp[2][6] = max(dp[1][6],dp[1][3] + 4)........

---------------------------------------------------

.......

如果网友画出了二维图,我们可以发现每一次的比较都是这个位置上面的值与左上角的左面前的第几个数进行比较。

那我们在脑海中想象一下,这样的过程是不是在上一位没有加当前枚举到的数的最大金额与前面减掉正好可以容纳当前枚举到的数所占有的空间(这个时候的值就是上一层通过递推得来的最大金额,类似记忆化吧)进行比较。以此类推是不是就是看你加上这个物品与释放出能够容纳这个物品空间来加上这个物品的价值来比较,哪个大哪个就是最大金额。有点绕,但是反复琢磨一下吧,这个不是一时半会可以解决的,但是切记不要忘记dp数组的含义,否则到最后不仅浪费时间而且一但思路走进误区还要花费更多时间去纠正。

注意一下,这里咱们要是滚动数组,变成一维数组的话,这里的遍历就应该反向遍历了,因为只有反向遍历才不会覆盖值,从而导致比较时出现错误。

好了,今天的分享到此结束啦,希望你可以理解他啦,要是有不懂的地方可以在评论区留言,本文作者仅是大一新生,也就是对这个内容自己的胡说八道哈哈哈,感谢观看,希望大佬纠正。文章来源地址https://www.toymoban.com/news/detail-767822.html

到了这里,关于动态规划(DP)---背包二维图的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • AcWing算法学习笔记:动态规划(背包 + 线性dp + 区间dp + 计数dp + 状态压缩dp + 树形dp + 记忆化搜索)

    算法 复杂度 时间复杂度0(nm) 空间复杂度0(nv) 代码 算法 通过滚动数组对01背包朴素版进行空间上的优化 f[i] 与 f[i - 1]轮流交替 若体积从小到大进行遍历,当更新f[i, j]时,f[i - 1, j - vi] 已经在更新f[i, j - vi]时被更新了 因此体积需要从大到小进行遍历,当更新f[i, j]时,f[i - 1,

    2024年02月21日
    浏览(35)
  • 动态规划DP之背包问题3---多重背包问题

    目录 DP分析: 优化:  二进制优化 例题:         01背包是每个物品只有一个,完全背包问题是每个物品有无限个。         那么多重背包问题就是 每个物品有有限个 。 有 N 种物品和一个容量是 V 的背包。 第 i 种物品最多有 si 件,每件体积是 vi,价值是 wi。 求解

    2024年03月20日
    浏览(35)
  • 从01背包开始动态规划:暴力解法 + dp + 滚动数组 + dp优化

        01背包问题是动态规划中最经典的问题之一,本篇将通过给出其四种解法,使读者更深刻理解动态规划。   有N件物品和一个容量是 V 的背包,每个物品有各自的体积和价值,且每个物品只能放一次(这也是01背包名字的由来),如何让背包里装入的物品具有最大的价值总

    2024年04月17日
    浏览(42)
  • 动态规划—— 01背包问题(一维,二维)

    0-1背包问题是一个经典问题,特别是在算法和动态规划领域。问题是关于一个小偷,他有一个可以携带最大重量的背包,并且他有一组物品,其中每个物品都有自己的价值和重量。小偷希望在不超过背包所能承载的最大重量的情况下,最大化他从这些物品中获得的总价值。问

    2024年02月19日
    浏览(38)
  • 动态规划之二维费用的背包模型

    前置知识: 01背包问题:动态规划之01背包模型_如何何何的博客-CSDN博客 完全背包问题:动态规划之完全背包模型_如何何何的博客-CSDN博客 多重背包问题:动态规划之多重背包模型_如何何何的博客-CSDN博客 二维费用即背包问题有两个限制条件。 例题: 有 N 件物品和一个容

    2024年02月15日
    浏览(30)
  • 从二维数组到一维数组——探索01背包问题的动态规划优化

    本文将继续上一篇博客爬楼梯之后继续讲解同样用到了动态规划的 01背包问题 在解决动态规划问题时,我们经常面临着空间复杂度的挑战。01背包问题是一个典型的例子,通常使用二维数组来表示状态转移,但这样会带来额外的空间开销。在本文中,我们将探讨如何通过优化

    2024年04月11日
    浏览(50)
  • 【十七】【动态规划】DP41 【模板】01背包、416. 分割等和子集、494. 目标和,三道题目深度解析

    动态规划就像是解决问题的一种策略,它可以帮助我们更高效地找到问题的解决方案。这个策略的核心思想就是将问题分解为一系列的小问题,并将每个小问题的解保存起来。这样,当我们需要解决原始问题的时候,我们就可以直接利用已经计算好的小问题的解,而不需要重

    2024年02月03日
    浏览(32)
  • 算法竞赛必考算法——动态规划(01背包和完全背包)

    1.1题目介绍 1.2思路一介绍(二维数组) 代码如下: 1.3思路二介绍(一维数组) 空间优化   为什么可以使用一维数组?   我们先来看一看01背包问题的状态转移方程,我们可以发现 f[i]只用到了f[i-1],其他的是没有用到的,我们可以用滚动数组来做。   还有一个原因就是我

    2024年02月02日
    浏览(36)
  • DP算法:动态规划算法

    (1)确定初始状态 (2)确定转移矩阵,得到每个阶段的状态,由上一阶段推到出来 (3)确定边界条件。 蓝桥杯——印章(python实现) 使用dp记录状态,dp[i][j]表示买i张印章,凑齐j种印章的概率 i表示买的印章数,j表示凑齐的印章种数 情况一:如果ij,不可能凑齐印章,概

    2024年02月07日
    浏览(42)
  • 算法系列--动态规划--背包问题(1)--01背包介绍

    💕\\\"趁着年轻,做一些比较cool的事情\\\"💕 作者:Lvzi 文章主要内容:算法系列–动态规划–背包问题(1)–01背包介绍 大家好,今天为大家带来的是 算法系列--动态规划--背包问题(1)--01背包介绍 背包问题是动态规划中经典的一类问题,经常在笔试面试中出现,是非常 具有区分度 的题

    2024年04月16日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包