动态规划总结

原创 2016年05月31日 22:34:32


动态规划,在多阶段问题的解决中,最重要的就是注意前一种状况,对于当前状态的影响。像最长上升子序列问题等,这些比较典型的题目,应该认真学习掌握。

对于0-1背包问题,普通的0-1背包,题目比较典型。就是对于N件物品,以及容量为V的背包,放入的物品费用为c[i],价值为W[i],求解装入背包物品的价值最大。

思路很明确,N件物品,可以放也可以不放,设置一个二维数组,状态方程套模板即可,f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}。这里要注意的是,for循环第二次循环要由大到小。

完全背包,是在0-1背包的基础上,每件物品的数量为无限。简单优化:若两件物品i、j满足c[i]<=c[j],并且w[i]>=w[j],则将物品j去掉,不用考虑。

将费用大于V的物品去掉,转化为0-1背包:考虑到第i种物品最多选V/c[i]件,于是可以把第i种物品转化为V/c[i]件费用及价值均不变的物品,然后求解这个0-1背包问题。

模板为:for i=1..N

             for v=0..V

                    f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]|0=<k<=V/c[i]}

多重背包,对每种物品的数量有一定限制。掌握了0-1背包,及完全背包,多重背包就是在两者的基础上的改变。

分组背包,有N件物品和一个容量为V的背包。第i件物品的费用是c[i],价值是w[i]。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。

其状态方程为:f[k][v]=max{f[k-1][v],f[k-1][v-c[i]]+w[i]|物品i属于组k} ,f[k][v]表示前k组物品花费费用v能取得的最大权值 。

在动态规划的问题上,就问题而言,都有比较典型的模板,不过在实际解决中,还是应多练习,很多与背包问题,等看似无关的题目,其实深入分析之后,完全可以转化为背包,模板套用,代码并不困难。

 


动态规划总结与思考

这是一篇关于动态规划的思考文章,主要讲了我对动态规划的一些思考与总结。...
  • qiuzhijieluojianping
  • qiuzhijieluojianping
  • 2015年01月01日 10:57
  • 775

动态规划总结——经典问题总结

动态规划总结——经典问题总结 本文着重讨论状态是如何表示,以及方程是怎样表示的。当然,还附上关键的,有可能作为模板的代码段。但有的代码的实现是优化版的。 经典问题总结 最长上升子序列(LIS) 问题描...
  • qfikh
  • qfikh
  • 2016年07月19日 13:08
  • 2754

动态规划思想总结

一、dp的思想及实现方法:   动态规划是求解决策过程最优的数学方法,它的核心思想是把多阶段过程转化为一系列单阶段的问题,利用各阶段之间的关系,逐个求解。 二、动态规划大的分类: (1)线性动规...
  • small__snail__5
  • small__snail__5
  • 2016年07月30日 17:00
  • 384

LeetCode总结,动态规划问题小结

一,参考一般书籍中的“动态规划”讲解 1、基本概念 动态规划(Dynamic Programming)对于子问题重叠的情况特别有效,因为它将子问题的解保存在表格中,当需要某个子问题的解时,直接取值即...
  • EbowTang
  • EbowTang
  • 2016年03月04日 23:50
  • 5611

动态规划总结【模板】

最长递增子序列 最大连续子序列和 最大连续子矩阵和 最大M个连续子段的和 最大不连续子序列和 最长公共子序列 最长回文子序列 最长回文子串 最小编辑距离 01背包 完全背包 多重背包 二维费用背包 切...
  • u011676797
  • u011676797
  • 2015年05月01日 23:49
  • 1934

LintCode动态规划题总结

不知道什么是动态规划的,传送门在这儿:[干货]动态规划十问十答 动态规划进阶:动态规划:从新手到专家 相信看完上面两个链接的博客后,应该对于动态规划有一个新的认识和了解了。接下来就来看看LintCod...
  • luoshengkim
  • luoshengkim
  • 2016年08月13日 23:45
  • 1142

动态规划小结——背包问题

背包问题是动态规划的经典问题,因此,有必要弄清跟背包问题的所有分析过程并熟练掌握各种类型的代码 一,完全背包问题 1.问题描述:有n种物品,每种物品有无限多个,第i个物品重量是wi,价值是vi,从这些...
  • u014800748
  • u014800748
  • 2015年02月12日 12:24
  • 671

动态规划题目总结

题目1: 输出描述: 对于每组数据,输出一个整数,代表最长递增子序列的长度(不需要连续)。 输入例子: 2 7 89 256 78 1 46 78 8 5 6 4 8 2 17 ...
  • basycia
  • basycia
  • 2016年08月04日 11:03
  • 514

动态规划——算法总结(三)

动态规划算法通常用于求解具有某种最优性质的问题。在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子...
  • lu930124
  • lu930124
  • 2015年06月19日 15:14
  • 997

LeetCode总结 -- 一维动态规划篇

这篇文章的主题是动态规划, 主要介绍LeetCode中一维动态规划的题目, 列表如下: Climbing StairsDecode WaysUnique Binary Search TreesMaxi...
  • linhuanmars
  • linhuanmars
  • 2014年08月10日 11:16
  • 22067
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:动态规划总结
举报原因:
原因补充:

(最多只允许输入30个字)