拿下技术面上传简历

有 n 堆石子排成一排,第 i 堆有 a[i] 个,每次只能合并相邻两堆,代价为两堆石子数之和,求合并成一堆的最小总代价。写出状态定义和转移方程,并说明为什么外层循环一定要按区间长度 len 从小到大枚举,而不是写成"外层枚举左端点 i 从 1 到 n、内层枚举右端点 j"。

数据结构与算法动态规划与贪心校招知识点 1 个

面试官在考什么

判断候选人是否理解区间 DP 的状态依赖是按区间长度分层的有向无环结构,而不是把"len 在外层"当成模板背下来。

区间DP

回答框架 · 前两步

  1. 状态 f[l][r] 表示把 a[l..r] 合并成一堆的最小代价,边界 f[i][i]=0(只剩一堆不用合并)。
  2. 转移:f[l][r] = min_{l<=k<r} ( f[l][k] + f[k+1][r] ) + sum(l, r),其中 sum(l,r) 用前缀和 O(1) 求出。

还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。

上传简历,生成我的题库先看示例报告

延伸阅读

想看这个方向的整体准备路线? 进入「数据结构与算法」方向页

同一能力域的其他题