题目描述
输入两个整数表示字符串的长度,然后输入两个子序列,求这两个子序列的最长公共子序列的长度
输入样例
7 6
cnblogs belong
输出样例
4
子序列:一个给定的序列的子序列是在该序列中删除若干元素后得到的序列;
最长公共子序列(LCS)是一个在一个序列集合中(通常为两个序列)用来查找所有序列中最长子序列的问题。一个数列 ,如果分别是两个或多个已知数列的子序列,且是所有符合此条件序列中最长的,则称为已知序列的最长公共子序列。
上面就是关于序列的介绍。
题解
#include<iostream>
const int N=1e3+10;
using namespace std;
char str[N];
char arr[N];
int dp[N][N];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;i++)
cin>>str[i];
for(int i=1;i<=m;i++)
cin>>arr[i];
for(int i=0;i<=n;i++){
dp[i][0]=0;
}
for(int i=0;i<=m;i++){
dp[0][i]=0;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(str[i]==arr[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];
return 0;
}
希望我的这篇文章能对大家有所帮助。