题目:
题目大意:
输入两个字符串,找到其中相等的子序列。
代码:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <sstream>
#include <cstring>
using namespace std;
char a[1005],b[1005];
int c[1005][1005];
int main()
{
int i,o,aa,bb;
string s,word;
while(getline(cin,s))
{
stringstream ss(s);
ss>>word;
i=1;
o=0;
while(word[o])
{
a[i]=word[o];
i++;
o++;
}
aa=i-1;
ss>>word;
i=1;
o=0;
while(word[o])
{
b[i]=word[o];
i++;
o++;
}
bb=i-1;
memset(c,0,sizeof(c));
for(int i=1;i<=aa;i++)
{
for(int j=1;j<=bb;j++)/*状态转移方程:c[i][j]=c[i-1][j-1]+1(a[i]==b[i]);
c[i][j]=max(c[i-1][j],c[i][j-1]);(a[i]!=b[i])*/
{
if(a[i]==b[j])
c[i][j]=c[i-1][j-1]+1;
else
c[i][j]=max(c[i-1][j],c[i][j-1]);
}
}
printf("%d\n",c[aa][bb]);
}
return 0;
}