Compromise[2250@pku]

//@pku DY问题完整的LCS问题
//采用迭代的方法
//标志数组的初始化很重要,让s1,s2的下标从1开始很方便设置边界检测
#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;


#define N 120
#define Left -1
#define Up 1
#define NW    0
#define fin cin
int flag[N][N];
int dir[N][N];

vector<string> s1,s2,res;
void len();
void Output(int i,int j);
int main()
{
    //ifstream fin("input.txt");
    string s;
    while(1){
        s1.clear();
        s2.clear();
        res.clear();
        while(1)
        {
            fin>>s;
            if(s=="#")
                break;
            s1.push_back(s);
        }
        while(fin>>s){
            if(s=="#")
                break;
            s2.push_back(s);
        }
        len();
        Output(s1.size(), s2.size());
        bool first=true;
        for(int i=0;i<res.size();i++)
        {
            if(first){
                first=false;
            }
            else
                cout<<" ";
            cout<<res[i];
        }
        cout<<endl;
        if(fin.eof())
            break;
    }//end while
    return 0;

}


void len()
{
    for(int i=0;i<=s1.size();i++)
        flag[i][0]=0;
    for(int j=0;j<=s2.size();j++)
        flag[0][j]=0;
    
    for(int i=1;i<=s1.size();i++)
    {
        for(int j=1;j<=s2.size();j++)
        {
            if(s1[i-1]==s2[j-1])
            {
                flag[i][j]=1+flag[i-1][j-1];
                dir[i][j]=NW;
            }
            else
            {
                flag[i][j]=max(flag[i-1][j],flag[i][j-1]);
                if(flag[i-1][j]<flag[i][j-1])
                    dir[i][j]=Left;
                else
                    dir[i][j]=Up;
            }
        }
    }
}

void Output(int i,int j)
{
    if(i==0 || j==0)
        return ;
    if(dir[i][j]==NW)
    {
        Output(i-1,j-1);
        res.push_back(s1[i-1]);
    }
    else
    {
        if(dir[i][j]==Up)
            Output(i-1,j);
        else
            Output(i,j-1);
    }
}

posted on 2012-02-29 12:17 DjvuLee 阅读(95) 评论(0)  编辑 收藏 引用 所属分类: 动态规划


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2025年2月>
2627282930311
2345678
9101112131415
16171819202122
2324252627281
2345678

统计

常用链接

留言簿

随笔分类(13)

随笔档案(19)

文章分类(2)

文章档案(1)

搜索

最新评论

评论排行榜