水题一个
但是并不是对输入直接求LCS
输入指的是对应下标在真正序列中应该处在的位置
预处理下即可
代码如下:
#include <cstdio>
#include <cstring>
#include <algorithm>
#define MAXN 100
using namespace std;
int a[MAXN], b[MAXN], dp[MAXN][MAXN];
int get_lcs(int n) {
memset(dp, 0, sizeof(dp));
for(int i=1; i<=n; ++i) {
for(int j=1; j<=n; ++j) {
if(a[i] == b[j])
dp[i][j] = max(dp[i][j], dp[i-1][j-1]+1);
else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
}
}
return dp[n][n];
}
int main(void) {
int n, x;
scanf("%d", &n);
for(int i=1; i<=n; ++i) {
scanf("%d", &x);
a[x] = i;
}
while(scanf("%d", &x) != EOF) {
b[x] = 1;
for(int i=2; i<=n; ++i) {
scanf("%d", &x);
b[x] = i;
}
printf("%d\n", get_lcs(n));
memset(b, 0, sizeof(b));
}
return 0;
}