前面写过这个程序 但那个只是简单的把公共子序列长度求出来了,在这里,我把“把公共最长子序列中的一个输出出来”这个程序写一下,具体问题请看
直接发代码了:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char a[1005],b[1005];
int dp[1005][1005];
int di[1005][1005];
char c[1005];
int main()
{ scanf("%s%s",a,b);
memset(dp,0,sizeof(dp));
memset(di,0,sizeof(di));
int k,o;
k=strlen(a);
o=strlen(b);
for(int i=1;i<=k;i++)
{
for(int j=1;j<=o;j++)
{
if(a[i-1]==b[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
di[i][j]=1;
}
else
{
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
if(dp[i][j]==dp[i-1][j])
di[i][j]=3;
else if(dp[i][j]==dp[i][j-1])
di[i][j]=2;
}
}
}
int h=0;
while(k>0&&o>0)
{
if(di[k][o]==1)
{
c[h++]=a[k-1];
k--;
o--;
}
else if(di[k][o]==2) o--;
else if(di[k][o]==3) k--;
}
h--;
for(int i=h;i>=0;i--)
printf("%c",c[i]);
return 0;
}