【学习笔记】区间DP
区间DP
定义
区间\(DP\)求解时,往往与区间的合并有很大关系,通常是由小区间合并为大区间。
转移方程
\[f[i][j]=max(f[i][k]+f[k+1][j]+cost)
\]
其中\(i,j\)为区间的左右端点,\(k\)位断点。
求解
区间\(DP\)在求解时,通常是由小区间合并位大区间。
一般前两层循环枚举的是区间的左右端点,第三层循环枚举的是断点。
特殊的如果可以直接确定断点的位置,则只需要写两层循环即可
例题
石子合并 能量项链
这两道题目十分类似。
转移方程都为
\[f[i][j]=max(f[i][k]+f[k+1][j]+cost)
\]
对于第一题\(f[i][j]\)表示合并\(i\)到\(j\)堆的最大得分, \(f[i][k]+f[k+1][j]\)表示将\(i\)到\(k\)堆和\(k+1\)到\(j\)堆合并
对于第二题\(f[i][j]\)表示聚合\(i\)到\(j\)颗珠子的最大能量, \(f[i][k]+f[k+1][j]\)表示将\(i\)到\(k\)颗珠子和\(k+1\)到\(j\)颗珠子聚合
那么来看\(cost\)该如何计算
对于第一题,设\(s[i]\)表示前\(i\)个的石子数总和和 ,则
\[cost=s[j]-s[i-1]
\]
对于第二题,设\(a[i]\)表示第\(i\)个珠子的头标记,则
\[cost=a[i]*a[k+1]*a[j+1]
\]
注意到这两题都存在环,所以我们可以把数组开两倍,存两遍