【学习笔记】区间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] \]

注意到这两题都存在环,所以我们可以把数组开两倍,存两遍

posted @ 2024-09-23 22:24  SDFZ_GuoSN  阅读(3)  评论(0编辑  收藏  举报