AcWing-282石子合并(经典基础区间dp)

对这一部分代码的解释:

由于总的代价=之前的代价+当前的代价

当前的代价是恒定的,即:s[j]-s[i-1]

所以要使得总代价最小,即让之前的代价最小,之前的代价为:dp[i][k]+dp[k+1][j]。

由于这n堆石子有多种分法,但无论怎么分,最后都是左边连续的一堆合并后再与右边连续的一堆合并后的一大堆合并。

分法可以是左边留1堆,右边留n-1堆,也可以左边留2堆,右边留n-2堆...即左边留k堆,右边留n-k堆,其中1<=k<n-1。

所以求第i堆到第j堆合并所需最小的代价,可以将该集合分割成很多小集合,每个集合由左边留几堆,即k的值区分。

求出每个小集合的最小值后再将每个小集合比较,取更小的作为dp[i][j]的取值即可

上一篇:为硬刚小米SU7,华为智界S7整出了「梅开二度」操作


下一篇:【鸿蒙 HarmonyOS】@ohos.promptAction (弹窗)