[51nod]1006 最长公共子序列Lcs

来源:互联网 发布:淘宝淘口令在哪里输入 编辑:程序博客网 时间:2024/05/21 17:47

题目链接点这里

求两字符序列的最长公共字符子序列

做完dp后,倒推输出

这里写图片描述
图片转自http://blog.csdn.net/yysdsyl/article/details/4226630/

代码:

#include<cstring>#include<cstdio>#include<cmath>#include<iostream>#include<algorithm>using namespace std;char a[1010],b[1010];int f[1010][1010];string s;int main(){    scanf("%s",a+1);    scanf("%s",b+1);    int n=strlen(a+1);    int m=strlen(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]);        }    int i=n,j=m;    while(i && j)    {        if(a[i]==b[j])        {            s+=a[i];            i--;            j--;        }        else if(f[i][j]==f[i-1][j]) i--;        else j--;    }    int len=s.length();    for(int i=len-1;i>=0;i--)        printf("%c",s[i]);}
0 0
原创粉丝点击