蓝桥杯 最长公共子序列
注意维护两列 , 但是并不需要反复粘贴行 , 利用cur ^=1来复用
代码
#include<bits/stdc++.h>
using namespace std;
inline int read() {
int ans = 0, f = 1;
char ch = getchar();
while (ch < '0' || ch > '9') {
if (ch == '-')f = -1;
ch = getchar();
}
while (ch <= '9' && ch >= '0') {
ans = ans * 10 + ch - '0';
ch = getchar();
}
return ans * f;
}
const int N = 1e3+10;
int a[N],b[N];
int dp[N][2];
int main() {
int cur = 0;
int n=read(),m=read();
for (int i =1; i<= n;i++)a[i] =read();
for (int j = 1; j<= m;j++) b[j] =read();
for (int i = 1; i<= n; i++) {
for (int j = 1; j<= m; j++) {
if (a[i] != b[j]) dp[j][cur] = max(dp[j-1][cur],dp[j][cur^1]);
else dp[j][cur] = dp[j-1][cur^1]+1;
}
cur ^= 1;
}
cout<<dp[m][cur^1]<<"\n";
return 0;
}

浙公网安备 33010602011771号