实验9LCS算法
标签:output iostream string closed cli stdout play display bsp
问题:
给定序列$X,Y$,求最长公共子序列。
解析:
设$dp[i][j]$表示前$i$个$x$和前$j$个$y$的最长公共子序列。
$dp[i][j]=max(dp[i][j],dp[i-1][j],dp[i][j-1])$ 当前最长由前一个转移过来
$if(x[i]==y[j]) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1)$ 如果当前两位相等,最长序列长度$+1$
设计(核心代码):
1 for (int i = 0; i 0] = 0;
2 for (int i = 0; i 0][i] = 0;
3 for (int i = 1; i i) {
4 for (int j = 1; j j) {
5 if (x[i] == y[j]) {
6 dp[i][j] = dp[i - 1][j - 1] + 1;
7 }
8 else {
9 if (dp[i - 1][j] > dp[i][j - 1]) {
10 del[i][j] = 1;
11 dp[i][j] = dp[i - 1][j];
12 }
13 else {
14 del[i][j] = 2;
15 dp[i][j] = dp[i][j - 1];
16 }
17 }
18 }
19 }
分析:
$O(n*m)$。
源码:
https://github.com/Big-Kelly/Algorithm
1 //#include
2 #include set>
3 #include
View Code
实验9LCS算法
标签:output iostream string closed cli stdout play display bsp
原文地址:https://www.cnblogs.com/zhang-Kelly/p/12797623.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
实验9LCS算法
文章链接:http://soscw.com/index.php/essay/50733.html
评论