CodeForces - 721E
Posted ph = x
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces - 721E相关的知识,希望对你有一定的参考价值。
题目大意
现有一个长为 L的数轴,你要从0走到 L
给出n个互不相交的可行域。
你要选择长度为p的段,要求每一个段都要在可行域内。
选完一段之后下一段要么和其相接,要么和其间距至少为t,求问最多能选择几段。
解法1:动态规划
首先,我们得到以下结论:
1.如果我当前在一个可行域上有线段,那么必然是连续去取线段,直到结束。
这样,影响答案的无非是这n个可行域哪些插入线段,哪些被忽视。
接下来得到解法:f(i,j)表示前i个可行域,右端点为j最多插多少线段。(第二位状态个数太多)
注意到第二位状态j十分冗余,考虑优化:
2.在i固定,f(i,j)最优的时候,j越小越好。
所以f(i)表示前i个可行域最多插多少线段,g(i)表示在保证f(i)最优的情况下最小的右端点。
注意到g(i)递增,从而。
f(i) = max{ f(j) + ( Ri - g(j) )/p } (g(j)∈[Li, Ri])
g(i) = min{ Ri + t - ( Ri - g(j) )%p }
f(i) = max{ f(j) } + (Ri - Li)/p (g(j) < Li)
g(i) = min{ Ri + t - (Ri - Li)%p }
利用g(i)的单调性可以对两种dp转移方程进行均摊线性的维护。
解法2:算法分治
(待补)
以上是关于CodeForces - 721E的主要内容,如果未能解决你的问题,请参考以下文章
Codeforces Round #721 (Div. 2) Codeforces-1527