首页 > 代码库 > 区间DP模式

区间DP模式

对于区间DP,首先枚举要进行操作的区间长,然后枚举操作区间的左端点,用左端点和区间长算出右端点,然后枚举区间中的点进行DP操作就好了。
下面是模式代码:
首先是P的:
For p:=1 to n do // p是区间长度,作为阶段。 
for i:=1 to n do // i是穷举的区间的起点
begin
j:=i+p-1; // j是 区间的终点,这样所有的区间就穷举完毕
if j>n then break; // 这个if很关键。
for k:= i to j-1 do // 状态转移,去推出 f[i,j]
f[i , j]= max{f[ i,k]+ f[k+1,j]+ w[i,j] } 
end; 

福利:自己翻译成C++
for(int l=1;l<=n;l++)
{
    for(int i=1;i<=n-l+1;i++)
    {
        int j=i+p-1;
        for(int k=i;k<=j;k++)
        {
            f[i][j]=max/min(f[i][j],f[i][k]+f[k+1][j]+w[i,j]);
        }
    }
}

区间DP模式