【题目来源】: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");
}