最长公共子序列,值得注意的是这道题不能用scanf读字符串。
#include<stdio.h>
#include<string.h>
#define MAXD 1005
char s1[MAXD], s2[MAXD];
int dp[MAXD][MAXD];
int max( int a, int b)
{
return a > b ? a : b;
}
void solve()
{
int len1 = strlen(s1 + 1);
int len2 = strlen(s2 + 1);
memset( dp, 0, sizeof dp);
for( int i = 1; i <= len1; i ++)
for( int j = 1; j <= len2; j ++)
{
if( s1[i] == s2[j])
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max( dp[i - 1][j], dp[i][j - 1]);
}
printf( "%d\n", dp[len1][len2]);
}
int main()
{
while( gets(s1 + 1) != NULL)
{
gets( s2 + 1);
solve();
}
return 0;
}