题意:
给你两段文字,求最大相同单词数。
思路:
lcs的代码,+打印
代码如下:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 105;
int dp[N][N];
char a[N][N], b[N][N];
int path[3005];
int main(){
int la, lb;
while (~scanf("%s",a[la=1]))
{
while (a[la][0] != '#')
scanf("%s",a[++la]);
la--;
lb = 1;
scanf("%s", b[lb]);
while (b[lb][0] != '#')
scanf("%s", b[++lb]);
lb--;
memset(dp, 0, sizeof(dp));
memset(path, 0, sizeof(path));
for (int i = 1; i <= la; i++) {
for (int j = 1; j <= lb; j++) {
if (!strcmp(a[i], b[j]))
dp[i][j] = dp[i - 1][j - 1] + 1;
else
dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
int i = la, j = lb, k = 0;
while (dp[i][j])
{
if (dp[i][j] == dp[i - 1][j])
i--;
else if (dp[i][j] == dp[i][j - 1])
j--;
else
{
path[k++] = i;
i--; j--;
}
}
for (int i = k - 1; i > 0; i--)
printf("%s ", a[path[i]]);
printf("%s\n", a[path[0]]);
}
return 0;
}