📄 p1692.cpp
字号:
#include <iostream>
using namespace std;
const int MAXN = 110;
int main(){
int N;
cin >> N;
while(N--){
int a[MAXN],b[MAXN];
int pos1[MAXN][MAXN],pos2[MAXN][MAXN],f[MAXN][MAXN];
int n1,n2;
memset(f,0,sizeof(f));
cin >> n1 >> n2;
for(int i = 1;i <= n1;++i) cin >> a[i];
for(int i = 1;i <= n2;++i) cin >> b[i];
memset(pos1,0,sizeof(pos1));
memset(pos2,0,sizeof(pos2));
for(int i = 1;i <= n2;++i)
for(int j = 1;j <= n1;++j)
for(int k = j;k > 0;--k)
if(b[i] == a[k]){
pos1[i][j] = k;
break;
}
for(int i = 1;i <= n1;++i)
for(int j = 1;j <= n2;++j)
for(int k = j;k > 0;--k)
if(a[i] == b[k]){
pos2[i][j] = k;
break;
}
for(int i = 2;i <= n1;++i)
for(int j = 2;j <= n2;++j){
f[i][j] = max(f[i-1][j],f[i][j-1]);
if(a[i] != b[j] && pos1[j][i] && pos2[i][j]){
f[i][j] = max(f[i][j],f[pos1[j][i]-1][pos2[i][j]-1] + 2);
}
}
cout << f[n1][n2] << endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -