动态规划
经典,背包,股票问题
2019.9
1.做题先判断是否可以使用动态规划(联系3.),再搜索,贪心
2.思维上的提升相反
3.(搜索类问题/甚至非搜索类问题)确定使用动态规划后,可以画出搜索树,观察重叠子问题->状态转移方程(从记忆化搜索->自底向上)
4.确定状态方程
1^ 先确定决策(如何决策,决策的范围)(先确定决策可能使问题状态转移清晰->推理问题更加清晰)/先确定阶段/先确定状态
2^ 推几组数据,总结规律(例:打家劫舍)
5.一般题中问题表示状态,分治求选择(分治->高效分治->记忆化分治->动态规划)
6.表示状态的i,j可能表示 第i,j;或 前i,j
7.组合选取类问题都可以使用动态规划
8.动规解决不了,该暴力暴力
经典
leetcode 53 最大子序列和:
1.注意初始化
2.连续线性动态规划->依赖前一状态
leetcode 300 最长不下降子序列:
1.不连续->状态是一维
2.当前的状态可能来自序列前的某几个状态,填表是二重循环
leetcode 5 最长回文子串:
1.状态为二维,状态转移方程为bool量
2.考虑回文串特性,以串长控制填表
背包问题(0-1,多重,完全)
leetcode 416 分割等和子集
1.0-1背包
2.状态转换方程为布尔量,填充剩余容量
股票问题
leetcode 121 股票最简单 EP
1.暴力
2019.9
leetcode 62 不同路径:
1.dfs记忆化搜索:自顶向下
2.递推:自底向上
leetcode 63 不同路径2:
1.同上
leetcode 980 不同路径3: ER
leetcode 64 最小路径和:
1.使用动态规划
leetcode 120 三角形最小路径和:
------------------------------------------------------------------
leetcode 198 打家劫舍: EP
1.推几组数据,总结规律->动态方程
2.dp[i]=max(dp[k-2]+nums[k], dp[k-1])
leetcode 213 打家劫舍2: EP
1.dfs剪枝(超时)