正在载入在线练习界面,本页内容可直接阅读…
AK CSP › CSP-J 2024 第一轮真题 › 第 25 题
CSP-J 2024 第一轮 第 25 题:程序(二):给定7个 cost 值时的输出
题目
#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;
}
本小题
(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号