题库首页 › 信息学奥赛 › 题目 17693

阅读程序(三) 13-18题 组合题 #include #include #include #define ll long long int 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]); } // 动态规划计算最长公共子序列(LCS) for (int i = 1; i <= n; ++i) { for (int j = 1; j <= n; ++j) { // 状态转移:取上方或左方的最大值 f[i][j] = std::max(f[i-1][j], f[i][j-1]); // 若当前元素相等,则可以从左上角+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; }

正确答案:判断题答案A。输入4、1 2 3 4 / 1 3 2 2时输出2,正确。

试卷来源:2025 CSP-J入门级(第一轮)C++真题

本卷相关题目

在线做题 同科目题库