您的位置:首页 > 其它

51 nod 1006 最长公共子序列Lcs

2015-04-15 16:59 375 查看
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1006

参考博客 :http://blog.csdn.net/yysdsyl/article/details/4226630

#include<string>
#include<iostream>
using namespace std;
const int maxn = 1111;

int dp[maxn][maxn]={0};
string a,b;

void LCS(int n,int m)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1]+1;
else dp[i][j]=max(dp[i][j-1],dp[i-1][j]);
}

int main()
{
cin>>a>>b;
int l1=a.size(),l2=b.size();
LCS(l1,l2);
int len=dp[l1][l2];
string ans;
int i=l1,j=l2;
while(dp[i][j])
{
if(dp[i][j]==dp[i-1][j]) i--;
else if(dp[i][j]==dp[i][j-1]) j--;
else ans.push_back(a[i-1]),i--,j--;
}
for(int i=len-1;i>=0;i--)
cout<<ans[i];
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: