zoukankan      html  css  js  c++  java
  • 模拟60 题解

    A. 嘟嘟噜

    约瑟夫问题,然而线性过不去。

    观察本题的特殊性质:m远小于n。

    再看递推公式,发现当m很小的时候取模次数并不多,

    所以在这种情况下可以直接用一次乘法代替多次加法。

    B. 天才绅士少女助手克里斯蒂娜

    拆一拆式子就可以将i和j分离出来。

    然后用分治的思想在线段树上每次考虑合并就可以了,然而常数极大。

    卡了很久常极限数据才跑进2s。

    正解更简单,继续化简式子,可以直接改成区间求和的形式。

    C. 凤凰院凶真

    问题是两个字符串的最长上升公共序列。

    可以很简单地转化为三维偏序问题,

    一维排序之后二维树状数组就可以解决,然而复杂度是$O(n^2log^2n)$的。

    然而出题人并没有卡掉我。

    正解是将传统LCS中dp的含义略改一下。

    设$dp(i,j)$表示串a考虑到第i个字符但不必选,串b考虑到第j个字符且必选的最优策略。

    则有$dp(i,j)=max(dp(i-1,j),dp(i-1,k)+1)$。 $k<j$ $and$ $b[k]<b[j]$

    传统的$dp$缺陷是对于上升的要求付出了太多代价。

    这样$dp$可以只在$j$一维表示上升的要求,将$i$解放出来以优化复杂度。

    因为单层转移的要求是相同的,随便优化一下就$O(n^2)$了

  • 相关阅读:
    Linux设备管理(一):kobject, kset, ktype分析
    Keepalived高可用集群
    Nginx反向代理与负载均衡
    LNMP环境应用实践
    HTTP协议
    Nginx详解
    MySQL进阶
    MySQL安装与基本使用
    Jumpserver跳板机
    PXE自动化装机
  • 原文地址:https://www.cnblogs.com/skyh/p/11626529.html
Copyright © 2011-2022 走看看