UVA_10405
求最长公共子序列,为了防止字符串里有空格的情况,还是直接用gets读字符串更稳妥些。
#include<stdio.h>
#include<string.h>
#define MAXD 1010
char a[MAXD], b[MAXD];
int f[MAXD][MAXD];
int init()
{
if(gets(&a[1]) == NULL)
return 0;
gets(&b[1]);
return 1;
}
void solve()
{
int i, j, k1, k2;
k1 = strlen(&a[1]);
k2 = strlen(&b[1]);
memset(f, 0, sizeof(f));
for(i = 1; i <= k1; i ++)
for(j = 1; j <= k2; j ++)
{
if(a[i] == b[j])
f[i][j] = f[i - 1][j - 1] + 1;
else
f[i][j] = f[i - 1][j] > f[i][j - 1] ? f[i - 1][j] : f[i][j - 1];
}
printf("%d\n", f[k1][k2]);
}
int main()
{
while(init())
{
solve();
}
return 0;
}