您的位置:首页 > 其它

LCS输出

2016-07-07 18:24 176 查看
又踩了一个坑。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=2000;
int dp[maxn][maxn];
char a[maxn];
char b[maxn];
char d[maxn];
int f[maxn][maxn];
void dfs(int m,int n)
{
cout<<m<<" "<<n<<endl;
if(m==0||n==0) return ;
if(f[m]
==0){
dfs(m-1,n-1);printf("%c",a[m-1]);
}
else if(f[m]
==1)
dfs(m-1,n);
else
dfs(m,n-1);
}
int main()
{
int m,n;
scanf("%s%s",a,b);
m=(int)strlen(a);
n=(int)strlen(b);
for(int i=1;i<=m;i++) dp[i][0]=0;
for(int i=1;i<=n;i++) dp[0][i]=0;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
{
if(a[i-1]==b[j-1]) {dp[i][j]=dp[i-1][j-1]+1;f[i][j]=0;}//因为输入的时候是从0开始的,所以要-1来判断相不相等
else if(dp[i-1][j]>=dp[i][j-1]){
dp[i][j]=dp[i-1][j];
f[i][j]=1;
}
else{
dp[i][j]=dp[i][j-1];
f[i][j]=-1;
}
}
}
dfs(m,n);
printf("\n");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: