GESP C++ 真题 · 逐题精解
首页C++六级真题 › 2026年6月 › 第14题

GESP 2026年6月 C++六级 单选题 第14题

C++六级单选题2026年6月第14题

所属知识点:简单背包问题 难度要求:— 考频:—

给定整数数组 a,从中选若干元素使任意两个被选元素在原数组中都不相邻,且所选元素总和最大(打家劫舍)。下面 DP 代码横线处应填写( )。
int choose(vector<int>& a) {
    if (a.empty()) return 0;
    int n = a.size();
    if (n == 1) return a[0];
    vector<int> dp(n, 0);
    dp[0] = a[0];
    dp[1] = max(a[0], a[1]);
    for (int i = 2; i < n; ++i) {
        dp[i] = ________________________;
    }
    return dp[n - 1];
}

正确答案:B

题目解析
对第 i 个元素有两种选择:不选它(继承 dp[i−1])或选它(则不能选 i−1,得 dp[i−2]+a[i]),取较大者:max(dp[i−1], dp[i−2]+a[i]),选 B。💡 「打家劫舍」经典转移:选当前则跳过相邻,不选则沿用前一个。

想系统刷完 GESP C++ 1~8 级真题,并查看每道题的逐题精讲?

进入 GESPPASS 开始练习