AcWing 897. 最长公共子序列
原题链接
简单
作者:
英特耐雄纳尔
,
2021-04-28 13:42:46
,
所有人可见
,
阅读 262
// 因为这里是两个字符串,因此一般是用f[i,j]两维来表示
// 求最大值 那么 划分可以有重复
// 但若求个数,则不能有重复
// f[i,j]表示在a字符串的前i个字符中出现 ,在b字符串的前j个字符中出现的最大公共序列长度
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 1010;
char a[N],b[N];
int n,m;
int f[N][N];
int main()
{
cin>>n>>m;
scanf("%s",a+1); //从下标为1开始读入
scanf("%s",b+1);
for (int i = 1; i <= n; i ++ )
{
for(int j=1;j<=m;j++)
{
if(a[i]==b[j]) f[i][j]=f[i-1][j-1]+1;
else
{
f[i][j]=max(f[i-1][j],f[i][j-1]);
}
}
}
cout<<f[n][m];
return 0;
}