区间dp
对于区间dp,我们常常将其分割成对各子区间来进行动态规划
题目:282. 石子合并 - AcWing题库
闫氏dp法
区间dp在进行状态表示时,集合常常是一个区间
一、状态表示f[i][j](表示第i堆石子到第j堆石子的区间):
①集合:所有将第i堆石子到第j堆石子合并成一堆石子的合并方式
②Min。所有合并方式里代价的最小值
二、状态计算。最后一定是将左边一堆石子和右边一堆石子的合并。那么我们可以以最后一次合并的分界线来分类,那么分界线的两边即是左边一堆石子和右边一堆石子。
比如左边1个,那么右边就是k - 1个、左边2个,那么右边就是k - 2个、... 、左边k - 1个右边就是1个(k是区间的长度即 k = j - i + 1)
那么状态转移的方程即为左边的一堆石子合并所需要的体力 + 右边石子合并所需要的体力
+ 最后一步将左右区间合并所需要的体力。而最后一步合并的体力即为原始[i, j]的石子质量和=s[j] - s[i](可用前缀和进行求解)。f[i][j] = min(f[i][j], f[i][k] + f[k + 1][j - 1] + s[j] - s[i])
代码:
代码①:枚举长度