题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=36
代码如下:
01.
#include<cstdio>
02.
#include<cstring>
03.
#include<algorithm>
04.
using
namespace
std;
05.
char
a[1010];
06.
char
b[1010];
07.
int
dp[1010][1010];
08.
int
main()
09.
{
10.
int
icase;
11.
scanf
(
"%d"
,&icase);
12.
while
(icase--)
13.
{
14.
scanf
(
"%s%s"
,a,b);
15.
int
lena=
strlen
(a);
16.
int
lenb=
strlen
(b);
17.
memset
(dp,0,
sizeof
(dp));
18.
for
(
int
i=1;i<=lena;i++)
19.
for
(
int
j=1;j<=lenb;j++)
//dp数组用来保存所有对应长度的情况
20.
{
21.
if
(a[i-1]==b[j-1])
22.
dp[i][j]=dp[i-1][j-1]+1;
23.
else
24.
dp[i][j]=max(dp[i-1][j],dp[i][j-1]);
25.
}
26.
printf
(
"%d\n"
,dp[lena][lenb]);
27.
}
28.
return
0;
29.
}
30.