有 n n n堆石子排成一条直线,每堆石子有一定的重量。现在要合并这些石子成为一堆石子,但是每次只能合并相邻的两堆。每次合并需要消耗一定的体力,该体力为所合并的两堆石子的重量之和。问最少需要多少体力才能将n堆石子合并成一堆石子?
假设只有2堆石子,显然只有1种合并方案。
不管怎么合并,总之最后总会归结为2堆,如果我们把最后两堆分开,左边和右边无论怎么合并,都必须满足最优合并方案,整个问题才能得到最优解。
m [ i ] [ j ] = { 0 i = j min ( m [ i ] [ k ] + m [ k + 1 ] [ j ] ) + w [ i ] [ j ] i < j m[i][j]=\begin{cases}0&i=j\\ \min(m[i][k]+m[k+1][j])+w[i][j]&i<j\end{cases} m[i][j]=