- 问题:求两个序列 X={x1,…,xm} 和 Y={y1,…,yn} 的最长公共子序列(可以不连续)。
- 状态定义:c[i][j] 表示 X 的前 i 个字符和 Y 的前 j 个字符的 LCS 长度。
- 转移方程 (核心):
c[i][j]=⎩⎨⎧0c[i−1][j−1]+1max(c[i][j−1],c[i−1][j])i=0 或 j=0i,j>0 且 xi=yji,j>0 且 xi=yj
- 复杂度:时间 O(mn)。
- 技巧:如果在填表时 xi==yj,则取左上角值+1;否则取左边或上边的最大值。