核心: 状态定义 状态转移方程
启发思路(两种情况):选 或 不选 / 选哪个
DP三步:先写回溯,时间复杂度 指数级别;递归的过程中会重复计算,要保存计算结果,递归搜索 + 保存计算结果 = 记忆化搜索,此时时间复杂度优化为O(n),需要数组或者hash表保存中间结果,空间复杂度O(n);将记忆化搜索(自顶向下算)改为 递推(自底向上算),dfs 改成 f数组,递归改成循环,递归边界 改成 数组初始值,此时时间复杂度O(n),空间复杂度O(n);最后用几个变量(滚动数组) 代替 数组,空间复杂度O(1)