首页 > 其他分享 >9.最长公共子序列问题(动态规划)

9.最长公共子序列问题(动态规划)

时间:2022-08-14 22:15:20浏览次数:64  
标签:int s2 s1 公共 序列 505 最长 dp

题目描述:
给定两个序列 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

相关文章