关于分段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]是断点(算符位置)之后的区间在当前分段方法下得到的数据

浙公网安备 33010602011771号