GESP 六级 · GESP 202506 C++ 六级 第 25 题

判断题 · 答案 A · 考点:动态规划

← 整套速查表 GESP 六级 全部真题

题目

下面代码采用动态规划求解零钱兑换问题:给定 $n$ 种硬币,第 $i$ 种硬币的面值为 $coins[i - 1]$,目标金额为 $amt$,每种硬币可以重复选取,求能够凑出目标金额的最少硬币数量;如果不能凑出目标金额,返回 -1。

int coinChangeDPComp(vector<int> &coins, int amt) {
    int n = coins.size();
    int MAX = amt + 1;
    vector<int> dp(amt + 1, MAX);
    dp[0] = 0;

    for (int i = 1; i <= n; i++) {
        for (int a = 1; a <= amt; a++) {
            if (coins[i - 1] > a)
                dp[a] = dp[a];
            else
                dp[a] = min(dp[a], dp[a - coins[i - 1]] + 1);
        }
    }
    return dp[amt] != MAX ? dp[amt] : -1;
}
答案:A

考点

动态规划 讲解 →动态规划 真题汇总 →

解题思维

STL 容器:vector(动态数组)、set/map(红黑树,有序)、unordered_set/map(哈希表,无序)。注意迭代器失效问题。

常见错误

审题时注意题目要求(选正确还是选错误),避免因审题不清失分。涉及代码的题目要逐行分析变量变化。

详细解析(节选)

【考点】动态规划|背包问题|状态转移

1. 🎯 考纲定位

GESP 六级 C++ 算法综合模块,动态规划专题。命题人把这道题放在六级而非更高阶,是看住大量考生"以为背了背包问题模板就能得分"的浮躁心态——他们往往只看形式相似,却对哨兵值、循环顺序、边界条件这些决定正确性的细节视而不见。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断