题目描述:
给定两个序列 X={x1,x2,…,xm} 和 Y={y1,y2,…,yn},找出X和Y的最长公共子序列。
输入格式:
输入数据有多组,每组有两行 ,每行为一个长度不超过500的字符串(输入全是大写英文字母(A,Z)),表示序列X和Y。
输出格式:
每组输出一行,表示所求得的最长公共子序列的长度,若不存在公共子序列,则输出0。
样例①
输入:
ABCBDAB
BDCABA
输出:
4
代码:
#include <bits/stdtr1c++.h>
using namespace std;
char s1[505], s2[505];
int dp[505][505];
int main() {
while (~scanf("%s\n%s", s1 + 1, s2 + 1)) {
memset(dp, 0, sizeof dp);
int n = strlen(s1 + 1), m = strlen(s2 + 1);
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (s1[i] == s2[j]) dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
cout << dp[n][m] << endl;
}
return 0;
}
标签:int,s2,s1,公共,序列,505,最长,dp
From: https://www.cnblogs.com/Fare-well/p/16586509.html