正在载入在线练习界面,本页内容可直接阅读…

AK CSP › CSP-J 2024 第一轮真题 › 第 25 题

CSP-J 2024 第一轮 第 25 题:程序(二):给定7个 cost 值时的输出

阅读程序 · 动态规划 · 难度 很难 · 答案 B

题目

#include <iostream>
#include <vector>
using namespace std;

int compute(vector<int>& cost) {
    int n = cost.size();
    vector<int> dp(n+1, 0);
    dp[1] = cost[0];
    for (int i = 2; i <= n; i++) {
        dp[i] = min(dp[i-1], dp[i-2]) + cost[i-1];
    }
    return min(dp[n], dp[n-1]);
}

int main() {
    int n;
    cin >> n;
    vector<int> cost(n);
    for (int i = 0; i < n; i++) {
        cin >> cost[i];
    }
    cout << compute(cost) << endl;
    return 0;
}
CSP-J 2024 第一轮 第 25 题 原题
原题扫描(页面加载后可直接在线作答)

本小题

(4 分)如果输入的 cost 数组为 $\{10, 15, 30, 5, 5, 10, 20\}$,程序的输出为(  )。

选项

  • A. 25
  • B. 30
  • C. 35
  • D. 40

答案

B

题解

答案是 B. 30。按照程序的递推公式,依次计算 dp 即可。

初始化:dp[0] = 0,dp[1] = cost[0] = 10。

循环中的公式是: \[ dp[i]=\min(dp[i-1],dp[i-2])+cost[i-1] \]

注意:cost 的下标从 0 开始,所以 cost[i-1] 是第 \(i\) 个数。

\(i\)计算过程\(dp[i]\)
2\(\min(10,0)+15\)15
3\(\min(15,10)+30\)40
4\(\min(40,15)+5\)20
5\(\min(20,40)+5\)25
6\(\min(25,20)+10\)30
7\(\min(30,25)+20\)45

最后返回的是 最后两个 dp 值的较小值: \[ \min(dp[7],dp[6])=\min(45,30)=\boxed{30} \]

真题版权归 CCF 所有,本站仅用于非商业教学用途。页面加载后可直接在线作答,作答记录保存在本浏览器或账号中。 京ICP备2026056990号-1 京公网安备11010502062986号