#include<stdio.h>
/*
给定两个长度分别为N和M的字符串A和B,求既是A的子序列又是B的子序列的字符串长度最长是多少。
*/
int dp[1005][1005];
char s1[1005];
char s2[1005];
int max(int a,int b)
{
return a>b?a:b;
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
getchar();
scanf("%s",s1+1);
getchar();
scanf("%s",s2+1);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]); //i,j前最长子序列长度
if(s1[i]==s2[j])
{
dp[i][j]=max(dp[i][j],dp[i-1][j-1]+1);
}
}
}
printf("%d",dp[n][m]);
}
动态规划--最长子序列
最新推荐文章于 2024-08-02 18:20:17 发布