码迷,mamicode.com
首页 > 其他好文 > 详细

区间dp

时间:2019-08-17 10:54:01      阅读:137      评论:0      收藏:0      [点我收藏+]

标签:不等式   min   需要   变换   bre   升级   递推   若是   思路   

区间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

标签:不等式   min   需要   变换   bre   升级   递推   若是   思路   

原文地址:https://www.cnblogs.com/jjjjjjy/p/11367525.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!