动态规划-DP优化
文章平均质量分 63
leodestiny
这个作者很懒,什么都没留下…
展开
-
UVA 1169 Robotruck 单调队列优化 DP
题意:在平面上有N个垃圾,告诉原创 2014-11-24 09:55:35 · 477 阅读 · 0 评论 -
四边形不等式优化DP
四边形不等式作为一种优化手段,可以加速某一些的动态规划转移。 其主要思想是利用决策变量的单调性,来减少状态转移过程中的决策,从而降低时间复杂度。 其中动态规划的转移方程会有如下的特征: 一.dp状态为二维,或者说可以表示成区间。 一般常见的形式为:dp[i][j]=min(dp[i][k]+w[k+1][j]),1≤k<j dp[i][j] = min (dp[i][k] + w[k+1]原创 2015-02-26 23:45:26 · 727 阅读 · 0 评论 -
POJ 1160 Post Office 四边形不等式优化DP
题意:在一条直线上有N个城市,给出每个城市到原点的距离。现在在一些城市设M个邮局,使每个城市到邮局的距离之和最小。 思路:首先要知道的是,如果N个城市设立一个邮局,邮局要位于中间(奇数为中间的一个,偶数位中间两个的任意一个)的城市上,才能使每个城市到邮局的距离之和最小。 设w[i][j] w[i][j]为在第i个城市到第j个城市之间修建一个邮局,i-j之间的所有城市都使用这个邮局的最小距离和。原创 2015-02-26 22:11:23 · 749 阅读 · 0 评论 -
HDU 2829 Lawrence 斜率优化DP
题意:敌人有一条直线形状的铁路,上面有N个据点,每个据点有对应的值表示他的价值。据点之间通过铁路相连。 整条铁路上的战略价值定义为:∑ (i,j) 1≤i<j≤N a i a j , \sum_{(i,j)}^{1 \le i\lt j \le N}a_ia_j,,其中(i,j) (i,j)表示可以通过铁路相互到达的两个据点,a i ,a j a_i,a_j为对应据点的价值。 我们现在能炸毁据原创 2015-02-25 17:13:46 · 469 阅读 · 0 评论 -
HDU 3045 Picnic Cows 斜率优化DP
题意:John要组织N头牛去春游。每头牛有自己的高兴值。John需要把这些牛分成若干组,每组内至少有T头牛。每个牛的高兴值,都会降低为组内高兴值最小的牛的高兴值。John想最小化减少的值。 思路:首先考虑到,对于每一组,我们要知道组内最小值、组内所有牛的高兴值、组内牛的数量,就能求出该组降低的高兴值。 同时,因为牛的分配有无序性,我们可以先排序,这样最小值就可以非常容易的知道了。 定义sum[原创 2015-02-25 17:59:22 · 572 阅读 · 0 评论 -
斜率优化DP
当DP的时间复杂度大于时限的时候,我们就要对DP进行优化。其中一个比较常用的就是用单调队列优化DP。 单调队列优化DP的思想是:减小最优解的搜索空间,提高状态转移的效率。和搜索中的剪枝一样。 单调队列通过下面的操作来缩小最优解的空间: 1.队首元素保留最优解。不是最优解的队首元素需要被删除。 2.整个队列保持单调性或者是下凸性。新加入的元素如果破坏这条性质,需要从尾部把旧元素删除,直到该性质原创 2015-02-25 20:27:57 · 618 阅读 · 0 评论 -
HDU 3480 Division 斜率优化DP
题意:现在有N个元素的集合S。把集合S划分成M个子集,每个子集的花费为集合中最大和最小元素的差的平方。 求如何划分,才能总的代价最小。 思路:首先要注意到,因为集合中的元素具有无序性,我们只需知道集合中最大和最小的元素就能算出代价,也能把集合划分出来。 所以,我们把所有元素进行排序,这样,最小的元素和最大的元素的位置就是已知的了。 定义:dp[i][j]将前j个元素划分成i个子集得到的最小花原创 2015-02-25 16:01:41 · 563 阅读 · 0 评论 -
HDU 3507 Print Article 斜率优化DP
题意:Zero有一台老式打印机。他想打印一篇有N个单词的文章,每个单词有花费C i C_i。在这台打印机上一行打印k个单词的花费为(∑ k i=1 C i ) 2 +M (\sum_{i=1}^{k} C_i)^2 + M,其中M为定值。求出Zero打印这篇文章的最小花费。 思路:可以注意到这个问题有重叠子问题和最优子问题。所以我们考虑从动态规划的角度来解决这个问题。 定义dp[i]为打印前i原创 2015-02-24 10:47:36 · 452 阅读 · 0 评论 -
UVA 1471 Defense Lines 单调队列优化
题意:给出长度为N的序列,现在让你删除一个连续的、任意长度的序列,从而形成一个最长的上升子序列。思路:第一遍看错题了,以为是标准的最长上升子序列,然后就错了。 再看一遍题意,其实只是让你删除一个连续的、任意长度的序列,注意只有一次机会。 这样,我们就能发现,其实最终的最长上升子序列是由两段拼成的,这两段分别是连续的。 首先第一个原创 2015-01-28 17:59:44 · 667 阅读 · 0 评论 -
UVA 1451 Average 斜率优化
题意:给出长度为N的01字符串。让你求出长度不小于L的子串,使该子串中1的个数除以子串长度,得到的平均值最大。思路:如果把字符串看出数组,那题意就是求 max((s[j] - s[i]) / (j - i)),其中s[i]为到下标i的前缀和。看到这里,我们如果以(i,s[i])为平面上的点的话,所求的式子其实对应了最大的斜率。 同时,因为题目中的都是非负数,所以s[i]是非递原创 2015-01-28 22:34:49 · 587 阅读 · 0 评论 -
BOJ 171 6th I 单调队列优化DP
题意:给出N个矩形的左下角的点(x1,y1)(x_1,y_1)、右上角的点(x2,y2)(x_2,y_2)。定义矩形A≤B A\le B ,当A.x2<B.x1A.x_2 \lt B.x_1且A.y2<B.y1A.y_2 \lt B.y_1。 求出最长的矩形序列A1,A2,...,AnA_1,A_2,...,A_n,满足A1≤A2≤A3...≤AnA_1 \le A_2 \le A_3 ... \原创 2015-03-22 17:07:32 · 749 阅读 · 0 评论