动态规划3:最长公共子序列(不连续)
//最长公共子序列--LCS
#include <stdio.h>
#include "cstring"
#include "vector"
#include "algorithm"
using namespace std;
const int N = 100;
char A[N], B[N];
int dp[N][N];//dp[i][j] A的i号位置与B的j号位置之前的LCS长度
int main() {
fgets(A + 1, N, stdin);//从1号位置开始
fgets(B + 1, N, stdin);
int lengthA = strlen(A + 1) - 1;
int lengthB = strlen(B + 1) - 1;
//边界
for (int i = 0; i <= lengthA; i++) {
dp[i][0] = 0;
}
for (int j = 0; j <= lengthB; j++) {
dp[0][j] = 0;
}
//状态转移方程
for (int i = 1; i <= lengthA; i++) {
for (int j = 1; j <= lengthB; j++) {
if (A[i] == B[j]) {
dp[i][j] = dp[i - 1][j - 1] + 1;
} else {
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
}
printf("%d\n", dp[lengthA][lengthB]);
return 0;
}
/* sadstory adminsorry */
测试结果:
还没有评论,来说两句吧...