最长公共子序列

来源:互联网 发布:python 实现http接口 编辑:程序博客网 时间:2024/06/05 20:16

给定两个序列:A1~An B1~Bn ,求它们最长公共子序列

如: A1 2 3 2 4 1 2

     B2 4 3 1 2 1

最长长度:4

路径:2 3 2 1

附AC码:

#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<iostream>#include<algorithm>using namespace std;int a[101];int b[101];int pro[101][101];int f[101][101];void out(int i,int j){    if(i*j==0)        return;    if(pro[i][j]==1){    out(i-1,j-1);    printf("%d ",a[i]);}else if(pro[i][j]==2)    out(i-1,j);else out(i,j-1);}int main(){    int i,j,k,m,n;    scanf("%d%d",&n,&m);    for(i=1;i<=n;i++)        scanf("%d",&a[i]);    for(i=1;i<=m;i++)        scanf("%d",&b[i]);    for(i=1;i<=n;i++)    for(j=1;j<=m;j++)    if(a[i]==b[j]){    f[i][j]=f[i-1][j-1]+1;    pro[i][j]=1;}else if(f[i-1][j]>f[i][j-1]){    f[i][j]=f[i-1][j];    pro[i][j]=2;}else{    f[i][j]=f[i][j-1];    pro[i][j]=3;}printf("%d\n",f[n][m]);out(n,m);return 0;}


0 0