关于分段dp的一个小细节

for(int i=1; i<=n; i++)
{
    dp[i][0]=sum[i];
    for(int j=1; j<=min(i-1, m); j++)
        for(int k=1; k<i; k++)
            dp[i][j]=max(dp[i][j],dp[k][j-1]*(sum[i]-sum[k]));
}

这是一般的分段dp模版

我对dp式的意义有一些新的理解:

在dp[i][j] = max(dp[i][j],dp[k][j-1] * (sum[i] - sum[k]))中

dp[k][j-1]是断点(算符位置)之前的区间在当前分段方法下得到的数据

而dp[k][j-1]是断点(算符位置)之后的区间在当前分段方法下得到的数据

 

posted @ 2021-06-12 11:49  Mint-hexagram  阅读(53)  评论(2编辑  收藏  举报