动态规划——区间dp】的更多相关文章

在利用动态规划解决的一些实际问题当中,一类是基于区间上进行的,总的来说,这种区间dp是属于线性dp的一种.但是我们为了更好的分类,这里仍将其单独拿出进行分析讨论. 让我们结合一个题目开始对区间dp的探讨. 凸多边形的最优三角剖分:给定一个具有N个顶点(N ≤ 50)(顶点从1到N编号)的凸多边形,每个顶点的权均已知.问如何把这个 凸多边形划分成N-2 个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小. 其实有一些组合数学底子的读者对这个模型会非常熟悉,笔者在<组合数学——Catalan数…
本博客部分内容参考:<算法竞赛进阶指南> 一.区间DP 划重点: 以前所学过的线性DP一般从初始状态开始,沿着阶段的扩张向某个方向递推,直至计算出目标状态. 区间DP也属于线性DP的一种,它以“区间长度”作为DP的“阶段”,使用两个坐标(区间的左.右端点)描述每个维度.在区间DP中,一个状态由若干个比它更小且包含于它的区间所代表的状态转移而来,因此区间DP的决策往往就是划分区间的方法.区间DP的初态一般就由长度为1的“元区间”构成. 下面介绍一道经典题:石子合并 题目描述: 设有N堆石子排成一…
因为昨天在Codeforces上设计的区间dp错了(错过了上紫的机会),觉得很难受.看看学长好像也有学,就不用看别的神犇的了. 区间dp处理环的时候可以把序列延长一倍. 下面是 $O(n^3)$ 的朴素区间dp: ; len<=n; len++) { //枚举长度 ; i+len<=n+; i++) { //枚举起点 ; for(int k = i; k<j; k++) { //枚举分割点,更新小区间最优解 dp[i][j] = min(dp[i][j],dp[i][k]+dp[k+][…
今天写内网题,连着写了两道区间dp,这里就总结一下. 区间dp思想主要是先枚举f[i][j]中的i,再枚举j,再枚举一个1~j之间的变量k,一般是f[i][j] = max(f[i][j],f[i][k] + f[k][j]);(石子合并) 但是今天遇到的两个都不是这样的. 第一题,复制书稿,洛谷P1282.猜到是区间dp了,但是没写出来.后来看了一下,f[i][j]代表前i个人写到j本书,枚举k为第i个人从第k本书开始写.这样转移方程就很好想了.f[i][j] = min(f[i][j],ma…
今天hdu的比赛的第一题,凸包+区间dp. 给出n个点m个圆,n<400,m<100,要求找出凸包然后给凸包上的点连线,连线的两个点不能(在凸包上)相邻,连线不能与圆相交或相切,连线不能相交但是可以有公共端点. 首先找出凸包,然后把n*n条边和m个圆算点到直线距离验证一下边是否与圆相交存到e[n][n]里. 然后显然是一个dp,但是我开始看错题目了以为不能有公共端点,能有公共端点的情况考虑一下像一个找三角形的过程,就是区间dp. 区间dp有一点妙的地方是最大区间范围是凸包点数而不用+1,因为连…
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5115 题目大意:前面有n头狼并列排成一排, 每一头狼都有两个属性--基础攻击力和buff加成, 每一头狼的攻击力等于他自身的基础攻击力加上旁边狼对他的buff加成. 现在你被这群狼围着了, 必须将这些狼全部击败, 你才能逃出, 你每攻击一头狼,收到的伤害是狼的总攻击力.现在问,你逃出这些狼的围攻需要的最小代价(收到的伤害): 解题思路:声明dp数组, dp[i][j]代表从i到j的区间杀死所有狼的最…
题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1025 题目大意:一串字符, 通过删除其中一些字符, 能够使这串字符变成回文串. 现在给你一串字符,问能够得到多少种不同的回文串: 注意:字符串"abba", 可以得到9串回文串,分别为'a', 'a', 'b', 'b', 'aa', 'bb', 'aba', 'aba', 'abba'. 解题思路:声明dp[i][j]为字符串[i,j]区间中通过删除可以得到不同回…
[SCOI2007]压缩 状态:设\(dp[i][j]\)表示前i个字符,最后一个\(M\)放置在\(j\)位置之后的最短字串长度. 转移有三类,用刷表法来实现. 第一种是直接往压缩串后面填字符,这样就是: \[dp[i+1][j]=min(dp[i+1][j],dp[i][j]+1)\] 另外一种就是往字串里添加\(R\),要满足相邻两个字符串是匹配的,可以用字符串哈希来快速匹,另外下面的\(k\)和\(sz\)要倍增往后跳(因为重复的串长在成倍增加,题目的样例解释的很清楚了). \[dp[k…
矩阵 jdoj-1910 题目大意:给你连续的n个矩阵的长和宽,保证每连续的两个相邻矩阵满足相乘的条件,不能改变题目中矩阵的位置,求将这些矩阵相乘为一个矩阵的最小乘法次数. 注释:1<=n<=500,a,b<=50.定义矩阵A(x,a)和矩阵B(a,y)的乘法次数为x*a*y. 想法:这题,不会这种算法tm没个写,我连WA三回结果是算法有问题.下面,我来介绍一种动态规划——区间dp 所谓区间dp,就是在将区间定义为一个变量,然后进行dp.这么说可能有些空洞,我们直接来看这道题. 首先,我…
Dire wolves, also known as Dark wolves, are extraordinarily large and powerful wolves. Many, if not all, Dire Wolves appear to originate from Draenor. Dire wolves look like normal wolves, but these creatures are of nearly twice the size. These powerf…