美文网首页动态规划
两种背包问题的第二次理解

两种背包问题的第二次理解

作者: lvanzn | 来源:发表于2018-09-14 19:23 被阅读172次

背包问题的本质思路就是决策:放还是不放该物品
一般的解决思路就是贪心思想。
背包的解决方案就是:
1.dfs+回溯
2.动态规划解决

两种都涉及到了决策方案
在dfs内部就是两种搜索:放和不放
在动态规划就是比较最大值再进行更新操作(在一维数组内部可以这样说明),
在二维数组内部,我把这种max(... , ...)叫做表格的填充操作

第一种背包问题:0-1背包
0-1背包就是每一个物品的数量只有一件,有一个固定容量的背包,有数个含有两种属性(价值和体积)的物品,求最大价值此时?

第二种背包问题:完全背包
完全背包与0-1背包问题的唯一区别在于每一个物品的数量都有无限个,求最大价值?

之前,我对这两个问题,尤其是枚举的顺序和这样枚举的意义是理解糊涂的,前几天看了一些资料,更加清晰了。

首先。先来探讨枚举的顺序(第二个循环)问题和这样枚举的意义是什么?

01package:

for(int i=1;i<=n;++I)
  for(int j=rongliang;j>=c[i];--j)
    dp[j]=max(dp[j],dp[j-c[i]]+w[i]);

因为每一件物品只有一件,如果从第一件物品开始选的话,前面选择的物品一定会影响后面的值。
我们不妨c[i]~rongliang的顺序开始考虑,假如dp[2]的值被更新了,
有因为dp[3]=max(dp[3],dp[3-c[i] ]),而原来的dp[2]的值被改变了,所以dp[3]不一定是最大的值。

mulit_package:

for(int i=1;i<=n;++I)
  for(int j=c[i];j<=rongliang;++j)
    dp[j]=max(dp[j],dp[j-c[i]]+w[i]);

这样的顺序是因为我们现在可以忽略第i个物品的数量了,也就是说,只要当前的背包能够放得下,我就把它放进去。
。。。orz

相关文章

  • 两种背包问题的第二次理解

    背包问题的本质思路就是决策:放还是不放该物品一般的解决思路就是贪心思想。背包的解决方案就是:1.dfs+回溯2.动...

  • week 16

    动态规划和背包问题理解 背包问题的理解 背包问题:物品有两个属性:重量和价值,即一个是增益,一个是获取限制,求利益...

  • 背包九讲——Java详解

    01背包问题 每个物品只有选和不选两种状态 完全背包问题 每个物品可以无限次选 多重背包问题 I 物品个数有数量限...

  • 动态规划

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

  • Chapter10——动态规划——背包问题

    1. 题目列表 POJ1837(变形的0-1背包问题,好好理解题意) POJ1276(多重背包问题、二进制优化)结...

  • (python实现)购物单问题

    购物单问题实际上是0-1问题,在解决这个问题之前,要理解0-1背包问题。可以自己百度或者阅读我对0-1背包问题的理...

  • [转]背包问题九讲v1.0(P05:二维费用的背包问题)

    问题 二维费用的背包问题是指:对于每件物品,具有两种不同的费用;选择这件物品必须同时付出这两种代价;对于每种代价都...

  • 背包问题(完全背包)

    动态规划合集: 1.矩阵链乘法2.投资组合问题3.完全背包问题4.01背包问题5.最长公共子序列 例题3——背包问...

  • 收藏 | 背包问题,一些你不知道的小技巧

    背包问题一共有9种类型,会不会很难呢? 今天,我准备了一份福利送给大家,帮助大家更加深入的理解背包问题。话不多说,...

  • 从01背包到完全背包

    01背包python代码(对应参考资料1练习题) 01背包问题对于每种物品有两种选择,取或者不取(1或0),故而叫...

网友评论

    本文标题:两种背包问题的第二次理解

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