题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1503
#include <cstdio>
#include <cstring>
using namespace std;
char str1[110],str2[110];
int dp[110][110];
int record[210][210];
void output(int lena,int lenb)
{
if(!lena&&!lenb)return;
if(record[lena][lenb]==2)//左上
{
output(lena-1,lenb-1);
printf("%c",str1[lena-1]);
}
if(record[lena][lenb]==1)//上边
{
output(lena,lenb-1);
printf("%c",str2[lenb-1]);
}
if(record[lena][lenb]==3)//左边
{
output(lena-1,lenb);
printf("%c",str1[lena-1]);
}
}
int main()
{
while(~scanf("%s%s",&str1,&str2))
{
memset(dp,0,sizeof(dp));
int len1=strlen(str1);
int len2=strlen(str2);
int count=0;
for(int i=1;i<=len1;i++)
{
dp[i][0]=i;
record[i][0]=3;
}
for(int i=1;i<=len2;i++)
{
dp[0][i]=i;
record[0][i]=1;
}
for(int i=1;i<=len1;i++)
{
for(int j=1;j<=len2;j++)
{
if(str1[i-1]==str2[j-1])
{
dp[i][j]=dp[i-1][j-1]+1;
record[i][j]=2;//左上
}
else
{
if(dp[i-1][j]<dp[i][j-1])
{
dp[i][j]=dp[i-1][j]+1;
record[i][j]=3;//左边
}
else
{
dp[i][j]=dp[i][j-1]+1;
record[i][j]=1;//上边
}
}
}
}
output(len1,len2);
printf("\n");
}
}
HDU1503:Advanced Fruits LCS 最大公共序列算法
最新推荐文章于 2019-10-31 23:24:41 发布