这是两道最简单的最基础的求最大公共子序列的长度:
/*
对于求最大公共子序列长度
if(a[i-1]==b[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;//这里比较好理解,当a[i-1]==b[j-1],那么自然dp[i][j]+1
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);//如果不是相等,那么就得比较dp[i-1][j],dp[i][j-1]谁比较大
}
*/
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N=1010;
char a[N],b[N];
int dp[N][N];
int main()
{
int i,j;
int len1,len2;
while(scanf("%s %s",a,b)!= EOF)
{
len1=strlen(a);
len2=strlen(b);
memset(dp,0,sizeof(dp));
for(i=1; i<=len1; i++)
{
for(j=1 ; j<=len2; 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]);
}
}
}
printf("%d\n",dp[len1][len2]);
}
return 0;
}
HDU 1159 && poj 1458
最新推荐文章于 2020-04-10 18:10:50 发布