区间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的主要内容,如果未能解决你的问题,请参考以下文章