POJ 2250--Compromise(LCS以及路径记录)

来源:互联网 发布:exp导出数据库lrm00108 编辑:程序博客网 时间:2024/04/25 02:44

来源:http://poj.org/problem?id=2250

题意:求最长公共子序列,并记录路径。

#include<iostream>#include<algorithm>#include<iomanip>#include<cstring>#include<string>#include<cstdio>#include<cmath>#include<queue>#include<map>#include<set>using namespace std;string ans[1005];int dp[1005][1005];string x[1005],y[1005];int path[1005][1005];int xx,yy;int t;void lcs(int i,int j){    if(i==0||j==0)    {        return ;    }    if(path[i][j]==0)    {        ans[t++]=x[i-1];        lcs(i-1,j-1);    }    else if(path[i][j]==1)    {        lcs(i,j-1);    }    else        lcs(i-1,j);}int main(){    string a;    while(cin>>a)    {        xx=0,yy=0;        if(a=="#")            goto B;        else            x[xx++]=a;        t=0;        while(getline(cin,a)&&a!="#")        {            string cur="";            for(int i=0;i<a.size();i++)            {                if(a[i]!=' ')                    cur+=a[i];                else                {                    x[xx++]=cur;                    cur="";                }            }            x[xx++]=cur;        }B:      string b;        while(getline(cin,b)&&b!="#")        {            string cur="";            for(int i=0;i<b.size();i++)            {                if(b[i]!=' ')                    cur+=b[i];                else                {                    y[yy++]=cur;                    cur="";                }            }            y[yy++]=cur;        }        for(int i=1;i<=xx;i++)        {            for(int j=1;j<=yy;j++)            {                if(x[i-1]==y[j-1])                {                    path[i][j]=0;                    dp[i][j]=dp[i-1][j-1]+1;                }                else                {                    dp[i][j]=max(dp[i][j-1],dp[i-1][j]);                    path[i][j]=dp[i][j-1]>dp[i-1][j]?1:2;                }            }        }        int tot=dp[xx][yy];        lcs(xx,yy);        for(int i=t-1;i>=0;i--)        {            cout<<ans[i]<<"  ";        }        cout<<endl;    }return 0;}


 

原创粉丝点击