51nod1006---最长公共子序列Lcs(51nod基础:动态规划)

来源:互联网 发布:淘宝代收货是什么意思 编辑:程序博客网 时间:2024/06/14 19:23

【题目来源】:http://www.51nod.com
【题意】
求出两个字符串的最长公共子序列,并输出任意一个。
【思路】
lcs模板,但是这是我第一次遇见输出字符串的。。。
【代码】

//一路坚持下去。#include<cmath>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;char string_one[1000+10];char string_two[1000+10];int dp[1000+10][1000+10];char string_lcs[1000+10];int main(){    scanf("%s",string_one);    scanf("%s",string_two);    int lenOne=strlen(string_one);    int lenTwo=strlen(string_two);    memset(dp,0,sizeof(dp));    for(int i=1;i<=lenTwo;i++)    {        for(int j=1;j<=lenOne;j++)        {            if(string_two[i-1]==string_one[j-1])                dp[i][j]=dp[i-1][j-1]+1;            else                dp[i][j]=max(dp[i-1][j],dp[i][j-1]);        }    }    int i=lenTwo,j=lenOne,lenLcs=0;    while(dp[i][j])    {        if(dp[i-1][j]==dp[i][j])        {            i--;        }        else if(dp[i][j-1]==dp[i][j])        {            j--;        }        else        {            string_lcs[lenLcs++]=string_two[i-1];            i--;j--;        }    }    for(int i=lenLcs-1;i>=0;i--)        printf("%c",string_lcs[i]);    printf("\n");}