GESP 八级 · GESP202609 C++ 八级 第 3 题

选择题 · 答案 B · 考点:动态规划

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

题目

有 4 堆石子,数量分别为 1、2、3、4。每次可以合并相邻两堆,合并代价为两堆石子数之和。将所有石子合并成一堆的最小总代价为( )。

答案:B

考点

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

解题思维

看到这题先想区间 DP 框架:dp[i][j] 表示合并第 i 到 j 堆的最小代价,状态转移是枚举中间分割点 k,dp[i][j] = min(dp[i][k] + dp[k+1][j] + sum(i..j))。因为石子数已排序,也可用贪心:每次合并相邻最小的两堆,本质是构建最优二叉合并树。

常见错误

A 项 17 是贪心合并 1+2+3+4 的简单累加,忽略了每次合并后新堆会参与后续合并;C 项 20 是合并顺序不当(如先合 3+4 再合 1+2)产生的次优解;D 项 23 是把 4 当作独立堆最后再合并,代价最大。

详细解析(节选)

1. 考纲定位

本题考查《GESP 八级》"动态规划与区间问题"模块。命题人卡住的是考生对"区间最优子结构"的直觉——多数人会直接贪心合并最小的两堆,却忽略合并后的新堆会参与后续合并,导致代价被低估。

2. 解题思维

DP 建模:设 dp[i][j] 为合并第 i 到 j 堆的最小代价。

手工推演(石子数 1,2,3,4):

贪心验证:1+2=3 → 3+3=6 → 6+4=10,总代价 3+6+10 = 19。两种方法一致。

同考点真题

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