zoukankan      html  css  js  c++  java
  • 八.动态规划dp

    四.动态规划

    代码随想录内容:

    1.动态规划当前状态是由前面状态推导而来的,而贪心是局部直接选最优的

      存在递推关系(存在状态转移),也就是当前状态是由前面状态推导而来的。可以使用动态规划

    2.动态规划的解题步骤:(dp数组,状态转移公式,初始化,遍历顺序,举例子)(动规五部曲,类似前面的递归三部曲,回溯三部曲)

    (1)确定dp数组(dp table)以及下标的含义(dp[i] 和 i 的含义)

    (2)确定递推公式状态转移公式

    (3)dp数组如何初始化

    (4)确定遍历顺序

    (5)举例推导dp数组

    3.动态规划如何debug

    把dp数组打印出来。写代码之前把状态转移在dp数组上模拟一遍,做到心中有数,debug的时候也容易找问题

     Labuladong内容:

    1.动态规划的一般形式就是求最值。例如:最长递增子序列,最小编辑距离

    2.动态规划三要素:重叠子问题,最优子结构,状态转移公式

    3.在斐波那契数列问题里面,状态转移公式就代表着暴力解法(暴力递归)。优化方法就是用备忘录或者DP table,再无奥妙可言 

    小点:

    1.dp分析时从后往前分析,写程序时从前往后迭代

    2.存在重叠子问题的题目可以用动规

      存在状态转移的问题可以用动规

    3.定义了dp[i],那么dp[i]一般和dp[i-1]有关

    4.dp数组也叫状态数组,保存每个状态

    5.背包问题都是这种累加的形式

    6.01背包:每个物品只能使用一次,完全背包:每个物品可以重复使用

    7.记忆化搜索就是带备忘录的递归(带备忘录的dfs)

    8.贪心中的局部(子问题)就类似于动规中的状态

      N647.最长连续递增子序列 可以用贪心做,后面做贪心的时候可以回来看看

    9.Arrays.fill()方法初始化的时候比较有用

    10.动态规划中状态的定义是个难点

  • 相关阅读:
    分布式网站数据库同步方案——sqlserver数据库同步复制
    GridView控件中加自动排列序号
    天使的声音
    看人家老外是怎么乱扔垃圾的
    滚动条样式收集
    ASP程序加密解密方法全面解析
    Rewrite实现页面静态化重写
    [转]修改Linux操作系统日期和时间
    Sybase备份还原
    C#读写Access数据库公用类
  • 原文地址:https://www.cnblogs.com/midiyu/p/15253338.html
Copyright © 2011-2022 走看看