万卷网 > 题目详情
题型:组合题
#include <algorithm>
#include <cstdio>
#include <cstring>
#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;
}


(1).

如果在16行的循环前加上以下两行:“std::sort(a+1,a+n+1);std::sort(b+1,b+n+1)”,则答案会()。

A.

变大或不变

B.

变小或不变

C.

一定变大

D.

不变

(2).

当输入“4 1 2 3 4 1 3 2 2”时,输出为2。()

A.正确 B.错误
(3).

当程序运行完毕后,对于所有的1≤i,j≤n,都一定有f[i][i]<=f[n][n]。()

A.正确 B.错误
(4).

输出的答案满足的性质有()。

A.

小于等于n

B.

大于等于0

C.

不一定大于等于1

D.

以上均是

(5).

将第18行的“[i][i]=std::max(f[i]D),std:max(f[i-1][i],f[i]D-1)));”删去后,并不影响程序运行结果。()

A.正确 B.错误
(6).

如果输入的a={1,2,…,n},而且b数组中数字均为1~n中的正整数,则上述代码等价于下面哪个问题:()。

A.

求b数组去重后的长度

B.

求b数组的最长上升子序列

C.

求b数组的长度

D.

求b数组的最大值

更新时间:2025-10-15 11:45:37 |
【知识点】 CCF非专业级别软件能力认证CSP-J/入门级

相似题推荐

简答题

T4多边形


2026-04-17
简答题

T3异或和


2026-04-17
简答题

T2座位


2026-04-16
简答题

T1拼数

2026-04-16
单选题

假设a、b、c都是布尔变量,逻辑表达式(a &&b)IⅡ(!c &&a)的值与下列哪个表达式不始终相等?()

A.

a &&(bⅡ!c)

B.

(al|!c)&&(bⅡ !c)&&(all a)

C.

a &&(!b II c)

D.

!(!a|!b)II(a &&!c)

2025-10-16
公众号
客服 反馈
顶部