ZOJ 1733 Common Subsequence

简单的动规题,最长公共子序列LCS,查了一下算法
我原本定义了一个很大的二维数组备用,结果内存溢出,然后一点点改小,结果居然AC了,其实有更好的算法(定义一个rer[2][la+1]的数组即可)
因为偷懒没有去编

#include <iostream>
#include <string>
using namespace std;
int rer[1000][1000];
int main()
{
    string a,b;
    int la,lb,i,j,k;
    while(cin >> a,cin >> b)
    {
        la = a.size();
        lb = b.size();
        for(i=0;i<=la;++i)
            rer[0][i] = 0;
        for(i=0;i<lb;++i)
            rer[i][0] = 0;
        for(i=1;i<=la;++i)
            for(j=1;j<=lb;++j)
            {
                if(a[i-1]==b[j-1])
                    rer[i][j] = rer[i-1][j-1] +1;
                else if(rer[i-1][j]>rer[i][j-1])
                    rer[i][j] = rer[i-1][j];
                else
                    rer[i][j] = rer[i][j-1];
            }
        cout << rer[la][lb] << endl;
    }
    return 0;
}
posted on 2006-09-13 21:23  AnewR  阅读(387)  评论(0)    收藏  举报