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;
}
我原本定义了一个很大的二维数组备用,结果内存溢出,然后一点点改小,结果居然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;
}
浙公网安备 33010602011771号