所谓区间dp,顾名思义就是在一段区间上的动态规划。
它既要满足dp问题的最优子结构和无后效性外,还应该符合在区间上操作的特点。
往往会对区间进行合并操作,或是单个元素(可看成一个小区间)跨区间进行操作。
/* 先初始化DP数组 */
for(int i=1;i<=n;i++)
{
dp[i][i] = 初始值;
}
for(int len=2;len<=n;len++) //区间长度
for(int i=1;i<=n;i++) //枚举起点
{
int j=i+len-1; //区间终点
if(j>n) break; //越界结束
for(int k=i;k<j;k++) //枚举分割点,构造状态转移方程
{
dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]); //状态转移
}
}