1、划分阶段
自顶向下分析,将问题不断简化,划分成若干个阶段,确保阶段的有序,即按阶段顺序,自下而上解决时,能一步步推导出最终结果
2、确定状态
从初始到结束,每个阶段都有自己的状态,用数组来记录每个状态下的解
⚠️要确保无后效性(比如子序列问题一般都用dp[i]来表示以nums[i]结尾时的解)
当需要频繁调用时,可以考虑用空间换时间来提高效率
3、确定状态转移关系
dp[i]与已求解状态之间的关系
⚠️无法确定关系时,需要回到第一步,重新划分
4、确定数组边界值
循环终止条件
5、求得最优解
根据已知信息求解