【算法笔记】区域型动态规划_石子并归

今天早晨稍微看了一些区域型动态规划的做法,并A了石子并归。


区域型动态规划在石子并归上反应的做法就是将所有的堆划分成小堆,从小堆到大堆逐步合成取得最优解(小堆到大堆的变化即为区间长度的变化)。

大堆的最优解的计算过程如下

将大堆分成任意两个小堆,大堆的最小成本即为 这所有小堆组合中最小成本和的最小值 再加上本次合并的成本。


由大堆的求解过程给出递推公式:

为了与下方编程一致 这里先声明几个变量 区间长度 k 区间起始位置i 区间中任意一点j 递推公式如下

minCost [ i ] [ i + k - 1] = min(minCost[ i ][ j ] + minCost[j + 1][ i + k - 1] + theCost)  其中theCost为本次合并所需要的成本,即为这个区间上所有堆质量之和

根据递推式写出代码

(图中变量weight 即为 minCost)


什么情况下可以联想到区域型动态规划呢?

当求解的问题可以划分成具有相同复杂度的子问题时可以使用,这里相同复杂度的意思是指递推式的复杂程度和N不存在明显的线性关系。这样便能从小到大解决


石子并归为什么贪婪算法不对呢?

每次用最小的相加贪婪算法看起来是对的,但是贪婪算法所求解的事本次最有解,再讲所有的本次最优解相加,这样的办法不一定是总体的最优解



你可能感兴趣的:(算法笔记)