zoukankan      html  css  js  c++  java
  • CodeForces

    题目大意

    现有一个长为 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:算法分治

    (待补)

  • 相关阅读:
    上经 -- 乾【卦一】乾为天(三)
    上经 -- 乾【卦一】乾为天(一)
    8. Shell 文件包含
    7. Shell 函数
    6. Shell 流程控制
    5. test命令
    4. printf 命令
    3. Shell 基本运算符
    2. Shell 传递参数
    shell介绍
  • 原文地址:https://www.cnblogs.com/lawyer/p/6347796.html
Copyright © 2011-2022 走看看