最长公共子序列

来源:互联网 发布:软件synthesia 编辑:程序博客网 时间:2024/06/15 02:27
tips:<pre name="code" class="cpp">//dp[i][j]=dp[i-1][j-1]+1   a[i]=b[j]//dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
输出最长子串运用递归思想
#include<iostream>#include<cstring>using namespace std;char x[101];char y[101];int c[101][101];int b[101][101]; void LCSLength(int m,int n){for(int i=1;i<=m;i++)for(int j=1;j<=n;j++){if(x[i]==y[j]){c[i][j]=c[i-1][j-1]+1;b[i][j]=1;//最长 }else {if(c[i-1][j]>=c[i][j-1]){c[i][j]=c[i-1][j];b[i][j]=2; }  else { c[i][j]=c[i][j-1]; b[i][j]=3; } }}}void display(int m,int n){if(b[m][n]==1){display(m-1,n-1);cout<<x[m];}else if(b[m][n]==2){display(m-1,n);}else if(b[m][n]==3)display(m,n-1); }int main(){int m,n; while(cin>>m>>n,m+n) { memset(c,0,sizeof(c)); memset(b,0,sizeof(b));  for(int i=1;i<=m;i++) cin>>x[i]; for(int j=1;j<=n;j++) cin>>y[j];  LCSLength(m,n) ;display(m,n);cout<<" "<<c[m][n]<<endl; }                                                    return 0; }  

0 0