#include <algorithm>#include <cstdio>#include <cstring>#define ll long longint f[5007][5007];int a[5007], b[5007];int n;int main() { scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &a[i]); } for (int i = 1; i <= n; ++i) { scanf("%d", &b[i]); } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { f[i][j] = std::max(f[i][j], std::max(f[i - 1][j], f[i][j - 1])); if (a[i] == b[j]) { f[i][j] = std::max(f[i][j], f[i - 1][j - 1] + 1); } } } printf("%d\n", f[n][n]); return 0;}当输入 4 1 2 3 4 1 3 2 2 时,输出为 2。( )
当程序运行完毕后,对于所有的 ,都一定有 。( )
将第 18 行的 f[i][j] = std::max(f[i][j], std::max(f[i-1][j], f[i][j-1])); 删去后,并不影响程序运行结果。( )
输出的答案满足的性质有( )。
如果在 16 行的循环前加上以下两行:
std::sort(a+1, a+n+1);std::sort(b+1, b+n+1);则答案会( )。
(本题在原卷中被删除)如果输入的 ,而且 数组中数字均为 中的正整数,则上述代码等价于下面哪个问题:( )。