CSP-S 提高级 · CSP 2026 提高级第一轮 第 6 题

选择题 · 答案 C · 考点:区间DP、动态规划、简单动态规划

← 整套速查表 CSP-S 提高级 全部真题

题目

【单选】有 5 堆石子排成一行,重量依次为 4、1、3、2、5。每次只能把相邻的两堆合并成一堆,代价为这两堆重量之和。将所有石子合并成一堆的最小总代价是( )。

答案:C

考点

区间DP动态规划 讲解 →动态规划 真题汇总 →简单动态规划

解题思维

相邻两堆合并是区间 DP 的经典模型:dp[i][j] = 把 a[i..j] 合并成一堆的最小代价,转移为 dp[i][j] = min(dp[i][k] + dp[k+1][j]) + sum(i..j)。长度从 2 推到 5,逐层填表即可。

常见错误

用贪心"每次合并最小的两堆"(那适用于"任意两堆可合并"的哈夫曼模型,本题只能合并相邻两堆,贪心会出错);也容易漏加区间和 sum(i..j) 这一项。

详细解析(节选)

解析

本题考查区间动态规划(相邻石子合并问题)。

状态与转移

设 dp[i][j] = 把第 i 堆到第 j 堆合并成一堆的最小总代价,sum(i, j) = a[i] + … + a[j]。

dp[i][j] = min{ dp[i][k] + dp[k+1][j] } + sum(i, j)(i ≤ k < j) dp[i][i] = 0

含义:先把 [i..k] 和 [k+1..j] 各自合并成一堆(代价 dp[i][k] + dp[k+1][j]),再合并这两堆(代价为本区间总重 sum(i,j))。

逐层填表

数组 a = [4, 1, 3, 2, 5],前缀和:s₀=0, s₁=4, s₂=5, s₃=8, s₄=10, s₅=15

长度 2(dp = 两数之和)

区间值
[1,2]4+1 = 5
[2,3]1+3 = 4
[3,4]3+2 = 5
[4,5]2+5 = 7

长度 3

长度 4

长度 5(答案)

答案 C(34)。

最优合并顺序示例

k = 3 对应:先合并 [1..3](4,1,3,代价 12)与 [4..5](2,5,代价 7),最后合并两大堆(代价 15)→ 总计 12 + 7 + 15 = 34 ✓

其他选项为什么错

记忆点

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