最长公共子序列笔记

定义

dp[ i ][ j ]表示s1...si与t1...tj对应的LCS长度

转移(缩小问题规模)

当s[ i+1] = t [ j+1]时,dp[ i + 1 ][ j + 1 ] = dp[ i ][ j ] + 1时。
因为这个元素构成了LCS的一部分,删除它就是删除了LCS的一部分。
对于其它情况
dp[ i + 1][ j + 1] = max (dp[ i ][ j + 1], dp[ i + 1][ j ])
因为最后两个元素不等,因此删除它对两个序列的LCS没有影响,但我们并不知道应该删掉谁的最后一个元素,因此我们都考虑一遍,然后取两种情况下LCS更长的那种。

优秀文章

posted @ 2021-10-31 21:45  tsrigo  阅读(33)  评论(0编辑  收藏  举报