写最长回文子序列
补全 lps:两端字符相同就 dp[i+1][j-1] + 2,不同就取 dp[i+1][j] 和 dp[i][j-1] 里大的。 输出 bbbab 的答案。
⚠️ 填表顺序写错会怎样
写两个石子合并:一个按区间长度填(对的),一个按左端点从小到大填(错的)。 把两个结果拼起来输出(对的在前)。
⚠️ 两个区间 DP 一起交
把石子合并和最长回文子序列都写出来,把两个答案拼起来输出(石子合并在前,回文用 bbbab)。 写完对照一下:两个的状态都是"区间 i 到 j",差别只在转移里怎么拆。
网格路径的转移方程
只能往右或往下走,走到某一格的路径数等于【0】。
编辑距离的三种操作
编辑距离允许的操作是【0】。
三行四列的网格有几条路
从左上角走到右下角,只能往右或往下。运行下面这段程序: def paths(m, n): dp = [[1] * n for _ in range(m)] for i in range(1, m): for
把 horse 改成 ros 要几步
每步可以插入、删除或替换一个字符。运行下面这段程序: def edit(a, b): m = len(a) n = len(b) dp = [[0] * (n + 1) for _ in range(m + 1)]
写网格路径
补全 paths:第一行和第一列都是 1,其余每格等于上面加左边。输出 3 行 4 列的路径数。
⚠️ 网格里放一块石头
同样 3 行 4 列,但 (1,1) 那一格有障碍,走不了。补全 paths_ob:障碍格的路径数是 0。 输出还剩几条路。
写编辑距离
补全 edit:第一行第一列是 0..n 和 0..m,字符相同取左上角,不同就在三个方向里取最小再加一。 输出 horse 变 ros 的步数。