动态规划基本模型

一:多阶段决策过程的最优化问题

二:动态规划的基本概念和基本模型构成

  1.阶段与阶段变量

  2.状态与状态变量

  3.决策,决策变量,决策允许集合

  4.策略与最优策略(思维核心

  5.状态转移方程(代码核心

三:最优化原理和无后效性原则

  1.最优化原理:

    最优解只是取决于局部最优,与非最优解关系不大

  2.无后效性原则:

    现在做的事情不影响以前做的事情,则从此阶段以后过程的发展变化仅与此阶段的状态有关,而与过程在此阶段以前的阶段所经历过的状态无关

四:基本动态规划模型的应用

  1.数塔问题

    (1)题目

    (2)思路

      a.爆搜:从第一个开始搜索,一直深搜到数塔的底端,最后一次返回值给顶端

      b.记忆化搜索:记录每一个走过的点,再把返回的值储存在一个record数组中,下次遇到record数组,只要有记录,直接返回

      c.Dp(顺推):状态转移方程:f[i][j]=max(f[i-1][j],f[i-1][j-1])+a[i][j];

         Dp(逆推):状态转移方程:f[i][j]=max(f[i+1][j],f[i+1][j+1])+a[i][j];

    (3)伪代码

      a.爆搜

      b.记忆化搜索

      c.Dp(顺推)

       Dp(逆推)

      

  2.最长不下降子序列

    (1)题目

    (2)思路

      朴素算法 n^n

      单调性优化 nlogn (dalao详细链接) 

        a.注意怎样输出路径,将一个c数组(需要额外开容量为N),将c[i]定位此时的队列位置,输出的时候从最后开始扫,如果c[i]=len输出,len--,一直到len为0,此时保证了更新的位置到最长不下降子序列的序列尾端的一段没有被漏掉,而是将更 新的位置往后的(注意不是标准长度的队列,只是有拓展)直接踢掉,例如数据 7 9 16 38 49 10,按照策略应该是 7 9 16 38 49 但是更新完的f数组则是 7 9 10 38 49 则不能直接串联输出,需要用数组标记,这样会自动过滤后面的,有点优秀哈,参考这个dalao

    (3)优化:如上单调性优化nlogn

    (4)伪代码

       朴素算法 n^n

      单调性优化 nlogn

  3.最长公共子序列

    (1)题目

    (2)思路:

      设置状态f[x][y]为截止到s1的x位置与s2的y位置,此时最长的公共子序列,对于s1[x],如果不在最长公共子序列中,则f[x][y]=f[x-1][y],对于s2[y],如果不在最长公共子序列中,则f[x][y]=f[x][y-1],如果s1[x]==s2[y],那么f[x][y]=f[x-1][y-1]+1,三者之间取  max(只不过后者要满足s1[x]==s2[y])

    (3)特殊情况优化

      a.题面:

      b.思路:首先按照一个规则将第一队列转为顺序储存,再按照同一规则处理第二队列,此时二队列原有关于最长公共子序列的性质任然没有变,又因为第一队列是顺序的,则第二队列只要是顺序的子序列就是公共子序列,问题转换为第二队列的最长上升子序列

      c.伪代码

  ·   (4)伪代码

      暴力Dp(n^n)    

    (5)变形

      最长上升公共子序列:首先想到的n4方的简单Dp,用f[i][j]代表为s1截止到i,s2截止到j,此时的最长上升子序列的长度,此时只需要s[i]==s[j]s[h]==s[k],s[i]==s[h].s[j]==s[k]在h,k中寻找一个最大的条件。

                优化:在处理两个字符串相同的时候,就进行处理,如果不相同,就继承以前的f[i][j-1],再到f[i][j-1]中搜寻最大的,再返回到前面。

      

                

    

      

 

未完待续~~~

转载于:https://www.cnblogs.com/SeanOcean/p/10990503.html

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
路径规划问题可以使用动态规划模型来解决。动态规划是一种通过将问题分解为子问题并使用子问题的解来构建整体解的算法设计方法。 在路径规划中,我们可以将地图表示为一个有向图,其中节点表示位置,边表示路径。动态规划可以通过以下步骤进行: 1. 定义状态:我们需要定义状态来描述问题的子结构。在路径规划中,可以使用一个二维数组来表示状态,其中数组的行代表节点,列代表到达该节点的最短路径的其他节点。 2. 定义初始状态:我们需要定义问题的初始状态。在路径规划中,初始状态是起始节点。我们可以将起始节点的最短路径长度设置为0,其他节点的最短路径长度设置为无穷大。 3. 状态转移方程:我们需要定义状态之间的转移关系。在路径规划中,可以使用以下公式计算节点之间的最短路径长度: dp[i][j] = min(dp[i][j], dp[i][k] + dp[k][j]) 其中dp[i][j]表示从节点i到节点j的最短路径长度,k表示其他节点。 4. 计算最优解:根据状态转移方程,我们可以使用动态规划算法计算出所有节点之间的最短路径长度。 5. 回溯路径:根据最短路径长度,我们可以回溯路径,找到从起始节点到目标节点的最短路径。 需要注意的是,动态规划适用于有向无环图(DAG),在存在环路的情况下,需要进行适当的处理。 这是一种基本的路径规划动态规划模型,具体的实现还需要根据具体的问题细节进行调整和优化。希望这个回答能帮到你!如果有更多问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值