动态规划
算法思想
有关动态规划的问题,大多是让你求最值的,比如最长子序列,最小编辑距离,最长公共子串等等等。这就是规律,因为动态规划本身就是运筹学里的一种求最值的算法。
关键是明确【状态】和【选择】,列出【状态转移方程】
明确 base case -> 明确「状态」-> 明确「选择」 -> 定义 dp 数组/函数的含义
状态:变化的量 (也就是原问题和子问题中会变化的变量)
选择:前后状态间的可选项 (也就是导致「状态」产生变化的行为)
状态转移方程:
dp[状态1][状态2]… = dp[状态1(变化)][状态2]…(选择1) + dp[状态1(变化)][状态2]…(选择2) + ...
base case:dp[0][0] = … ...
算法框架
优化
状态压缩:如果当前状态只和前一次状态有关,则用两变量存这两次的状态即可
最后更新于