Common Subsequence[1458@pku]

//@pku 1458 经典的DY问题LCS
//采用备忘录的方法
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;

#define N 1500
int flag[N][N];

int getlen(string &s1,int i, string &s2, int j);
int main()
{
    string s1,s2;
    int max=0;
    while(cin>>s1>>s2){
        memset(flag,-1,sizeof(flag));
        max=getlen(s1,s1.size()-1,s2,s2.size()-1);
        cout<<max<<endl;
    }//end while

    return 0;
}

int getlen(string &s1,int i, string &s2, int j)
{
    if(i==-1 || j==-1)
        return 0;
    else
    {
        if(flag[i][j]!=-1)
            return flag[i][j];
        if(s1[i]==s2[j])
        {
            if(i>0 && j>0)
            {
                flag[i-1][j-1]=getlen(s1,i-1,s2,j-1);
                return 1+flag[i-1][j-1];
            }
            else
            {
                return 1+getlen(s1,i-1,s2,j-1);
            }
        }
        else
        {
            if(i>0 && j>0)
            {
                flag[i][j-1]=getlen(s1,i,s2,j-1);
                flag[i-1][j]=getlen(s1,i-1,s2,j);
                return max(flag[i][j-1],flag[i-1][j]);
            }
            else
            {
                return max(getlen(s1,i,s2,j-1),getlen(s1,i-1,s2,j));
            }
        }
    }
}

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


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


导航

<2012年2月>
2930311234
567891011
12131415161718
19202122232425
26272829123
45678910

统计

常用链接

留言簿

随笔分类(13)

随笔档案(19)

文章分类(2)

文章档案(1)

搜索

最新评论

评论排行榜