题目链接: 点击打开链接
题目大意: 最长公共子序列
代码:
#include <cstdio>
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
const int maxn = 10000;
string a, b;
int dp[maxn][maxn];
void lcs()
{
int x = a.length(), y = b.length();
for (int i = 0; i <= x; ++i)
dp[i][0] = 0;
for (int j = 0; j <= y; ++j)
dp[0][j] = 0;
for (int i = 0; i < x; ++i)
for (int j = 0; j < y; ++j) {
if (a[i] == b[j])
dp[i+1][j+1] = dp[i][j] + 1;
else
dp[i+1][j+1] = max(dp[i][j+1], dp[i+1][j]);
}
}
int main()
{
while (cin >> a >> b)
{
lcs();
printf("%d\n", dp[a.length()][b.length()]);
}
return 0;
}