题意:
给定字符串 A 和 B,求既是 A 的子序列又是 B 的子序列的字符串长度最长是多少。
分析:
状态表示: 表示所有和的公共子序列的集合
集合划分: 以,是否包含在子序列当中为依据
代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 1005;
int n, m;
char a[N], b[N];
int f[N][N];
int main() {
cin >> n >> m;
cin >> (a+1) >> (b+1) ;
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
if (a[i] != b[j]) {
f[i][j] = max(f[i - 1][j], f[i][j - 1]);
} else {
f[i][j] = max(f[i][j], f[i - 1][j - 1] + 1);
}
}
}
cout << f[n][m] << endl;
return 0;
}
Q.E.D.