前言:本文为学习力扣文章《动态规划精讲(一)》时的学习笔记,本文对其进行线性动态规划相关的文章和问题进行了一定的转载和修改并在其中加入了一些个人的理解。
线性动态规划简介
线性动态规划主要是从0开始从小到大依次递推过去的,特点为问题规模依次从0到i依次递增,较大规模的问题依赖较小规模问题的解
这里问题规模为 i 的含义是考虑前 i 个元素 [0..i] 时问题的解。
状态定义:
1 | dp[n] := [0..n] 上问题的解 |
状态转移:
1 | dp[n] = f(dp[n-1], ..., dp[0]) |
单串
单串是线性动态规划最简单的一类问题,输入是一个串,状态一般定义为 dp[i] := 考虑[0...i]上,原问题的解,其中 i 位置的处理,根据不同的问题,主要有两种方式:
- 第一种是 i 位置必须取,此时状态可以进一步描述为 dp[i] := 考虑[0...i]上,且取 i,原问题的解;
- 第二种是 i 位置可以取可以不取