区间dp

Posted jjjjjjy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区间dp相关的知识,希望对你有一定的参考价值。

区间dp就是在区间上的动态规划,求解一段区间上的最优解,通过合并小区间的最优解来得到整个大区间上的最优解的算法。
区间dp一般都是三层for循环 需要注意的是 区间是从小到大 因为dp是后一个用到前一个的给出的结果 并进行递推 
区间dp常用的一个状态就是dp[i][j]表示i~j这个区间的最优解多少
区间dp的大致思路:
  1.确定状态 初始化长度为 n 的dp[][]的值
  2.枚举区间长度 枚举区间的起始点 (有些题还需枚举断点) 由小区间转移到大区间
  3.最终答案基本是 dp[1][n] or dp[0][n-1]

 

区间dp 模板
 1 //memset(dp,0,sizeof(dp)) 初始化DP数组
 2 for(int i=1;i<=n;i++)
 3     dp[i][i]=初始值
 4 
 5 for(int len=2;len<=n;len++)  //区间长度
 6 for(int i=1;i<=n;i++)       //枚举区间起点
 7     int j=i+len-1;           //区间终点
 8     if(j>n) break;           //越界结束
 9     for(int k=i;k<j;k++)     //枚举分割点,构造状态转移方程
10         dp[i][j]=max(dp[i][j],dp[i][k]+dp[k+1][j]+w[i][j]);
11     
12 

 



 

升级

1.由直线型变换成环形
  若是环形,则需要将整个数组复制一遍,然后在统计答案的时候,把1-n开头长度为n的区间求一个min 即可

2.优化 —— 四边形不等式优化

https://blog.csdn.net/noiau/article/details/72514812
//大佬blog 侵删


 

以上是关于区间dp的主要内容,如果未能解决你的问题,请参考以下文章

区间dp学习笔记

区间dp

区间dp 和 树型dp

区间动态规划

区间DP

区间DP