//POJ1458,LCS最长序列比对问题
//状态转移方程已经很清楚了
//dp[i][j]这个数组表示的是前i个a序列与前i个b序列的最长公共子序列数,
//其实时间复杂度为n*m,但是如果暴力求最优,应该比这多得多
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char a[1005],b[1005];
int dp[1005][1005];
int main()
{
char c;
while(scanf("%s",a)!=EOF){
memset(dp,0,sizeof(dp));
while(c=getchar(),c==' ');
b[0]=c;
scanf("%s",b+1);
int m=strlen(a);
int n=strlen(b);
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
}
cout<<dp[m][n]<<endl;
}
return 0;
}
【POJ1458】LCS最长公共子序列问题
于 2022-06-04 22:34:08 首次发布