九。动态规划

四.动态规划

代码随想录内容:

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.动态规划中状态的定义是个难点

原文地址:https://www.cnblogs.com/midiyu/p/15416755.html