531 - Compromise

描述:比较最长子序列,然后输出这个最长子序列

#include <cstdio>

#include <cstring>

int n,m,flag,arr[110][110],num[110][110];

char str[110][35],v[110][35];

void show(int x,int y)

{

    if(x==n||y==m) return;

    if(num[x][y]==1)

    {

        if(flag) printf(" ");

        else flag=1;

        printf("%s",v[y]);

        show(x+1,y+1);

    }

    else if(!num[x][y]) show(x+1,y);

    else show(x,y+1);

}

int main()

{

   // freopen("a.txt","r",stdin);

    while(scanf("%s",str[0])!=EOF)

    {

        for(n=1;; n++ )

        {

            scanf("%s",str[n]);

            if(str[n][0]=='#') break;

        }

        for(m=0;; m++)

        {

            scanf("%s",v[m]);

            if(v[m][0]=='#') break;

        }

        memset(arr,0,sizeof(arr));

        memset(num,-1,sizeof(num));

        for(int i=n-1; i>=0; i--)

            for(int j=m-1; j>=0; j--)

                if(strcmp(str[i],v[j])==0)

                {

                    arr[i][j]=arr[i+1][j+1]+1;

                    num[i][j]=1;

                }

                else if(arr[i+1][j]>arr[i][j+1])

                {

                    arr[i][j]=arr[i+1][j];

                    num[i][j]=0;

                }

                else arr[i][j]=arr[i][j+1];

        flag=0;

        show(0,0);

        printf("\n");

    }

    return 0;

}


你可能感兴趣的:(Promise)