题目描述
输入两个01串,输出它们的最长公共子序列的长度
输入输出格式
输入格式:一行,两个01串
输出格式:最长公共子序列的长度
输入输出样例
输入样例#1:
01010101010 00000011111
输出样例#1:
6
说明
01串长度≤10000
求最长公共子序列,还需要滚动数组压缩空间。
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
const int N=10005;
int l1,l2,f[3][N];
char s1[N],s2[N];
int main()
{
scanf("%s%s",s1+1,s2+1);
l1=strlen(s1+1),l2=strlen(s2+1);
for(int i=1;i<=l1;i++)
for(int j=1;j<=l2;j++)
{
int k=i&1;
if(s1[i]==s2[j])
f[k][j]=f[k^1][j-1]+1;
else
f[k][j]=max(f[k^1][j],f[k][j-1]);
}
printf("%d\n",f[l1&1][l2]);
return 0;
}