3动态规划

原创 2016年05月31日 20:54:09

此次专题主要讲解动态规划,题目大致分为两类 一种是递归来解决,一种是0/1背包问题。

动态规划就是把一个问题分成多个阶段来解决,并且每个阶段都相互有所联系。其遵循最优性原理。

1,不论初始状态和第一步决策是什么,余下的决策相对于前一次决策所产生的新状态,构成一个最优决策序列。

2,最优决策序列的子序列,一定是局部最优决策子序列。
3,包含有非局部最优的决策子序列,一定不是最优决策序列。
根据老师课件可以总结为解题步骤:
1,把问题分为若干个子问题就是分为若干个阶段
2,建立状态转移方程,一般是递推公式
3,找出边界条件
4,将边界值代入方程
5,递推求解

一,递归问题。
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?
这是一道简单的递归问题,没上一个台阶看做阶段,从第三层就能找出规律,他的状态转移方程为f(n) = f(n-1)+f(n-2)
之后将边界值带入就能求解。
二,求最长序列问题。
求公共最长子序列的题,首先要区别子序列与字串。子序列是可以不连续的,而字串一定是连续的。
我一般的做法就是建立动态规划数组dp[i][j]代表当比较到两个字符串的尽头时的最大公共子序列就是dp[i][j]
如图:

状态转移方程为:dp[i][j] = most(dp[i-1][j],dp[i][j],dp[i][j-1])分别是一串与二串之前有相同字符,同位有相同字符,之后有相同字符,取最大值。
三,0/1背包问题
典型题目:给你物品数目以及背包的容量,下面是各个物品的价值以及容量,让你求背包能装入的最大价值
状态转移方程:dp[i][j] = most(dp[i][j],dp[i-1][j-w[i])+v[i]);
w[i]即第i件物品的重量 v[i]第i件物品的价值dp[i][j]把前i件物品装入j容量的背包中所能获得的最大价值。
对每件物品就有两种选择,放或者不放,取其最大值,如果放这件物品则为dp[i-1][j-w[i]] + v[i],前i-1件物品放入j-w[i]的容量中所能获得的最大价值,如果不放就是dp[i-1][j]。
完全背包问题,在0/1背包问题的基础上,每种物品不单单是一件了,而是多件。

1) 子问题定义:F[i][j]表示前i物品中选取若干件物品放入剩余空间为j的背包中所能得到的最大价值。

        2) 根据第i物品放多少件进行决策

  dp[i][j] = max(f[i-1][j-k*w[i]) + k*v[i],f[i-1][j]) 0<=k*w[i]<=j 就是比0/1背包问题多加了一层每种物品数量的循环

还有分组背包问题,把物品分成若干组,在每一组中求最优。






acm课件3 动态规划

  • 2011年04月07日 18:25
  • 479KB
  • 下载

动态规划(篇3)最长公共子序列(LCS)

LCS问题陈述: 给定两个序列,找出它们中存在的最长子序列的长度。子序列是以相同的相对顺序出现但不一定是连续的序列。例如,“abc”,“abg”,“bdf”,“aeg”,“acefg”,…等是“a...

动态规划经典题打包下载3

  • 2009年12月12日 17:29
  • 254KB
  • 下载

《动态规划》 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m

这是一道中兴的面试题 题目: 输入两个整数 n 和 m,从数列1,2,3.......n 中 随意取几个数, 使其和等于 m ,要求将其中所有的可能组合列出来. ...

动态规划3:矩阵最小路径和问题

动态规划3:矩阵最小路径和问题

HDU 2045 不容易系列之(3)—— LELE的RPG难题 (动态规划)

题目链接:HDU 2045 题面: 不容易系列之(3)—— LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others)    Memory...

动态规划(3)

Robberies http://acm.hdu.edu.cn/showproblem.php?pid=2955 #include #include #include #include u...

算法3:动态规划(二)——背包问题

写在前面:本文记录一些背包问题(动态规划)的练习题,欢迎讨论!本系列系本人原创,如需转载或引用,请注明原作者及文章出处。本文持续更新。 一、Piggy Bank (POJ1384) 【恰好装满的完全背...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:3动态规划
举报原因:
原因补充:

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