Minimum Merge Cost - 最小合并代价


问题

将长度为的序列进行合并,每次合并将相邻的两个元素合并为一个新的元素,并且,合并的代价也为。经过次合并后,序列被合并为1个数字,这个过程的代价是之前所有合并的代价总和。求出将序列合并为一个数字的最小合并代价。合并过程如图:

MinMergeCost1.png

例如序列,合并过程有,最终合并代价为

解法

为序列中区域的所有元素之和,为合并区域的最小代价,其中。因此有如下状态转移方程:

初始化,对于同一个元素不需要合并,因此

初始化,对于不同的元素需要合并,设未知的

这两个区域的元素合并(),因此,选择该范围中所有结果的最小值即可;

即为序列的最小合并代价。该算法的时间复杂度是


石子合并


源码

MinimumMergeCost.h

MinimumMergeCost.cpp

测试

MinimumMergeCostTest.cpp