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)$了

  • 相关阅读:
    Spring温故而知新 – bean的装配
    Lambda表达式和表达式树
    委托的内部机制
    委托(C#)
    linux wdcp安装
    linux各个文件夹作用
    linux基本命令
    python调用html内的js方法
    Win10在右键菜单添加“在此处打开命令窗口”设置项
    python read文件的r和rb的区别
  • 原文地址:https://www.cnblogs.com/skyh/p/11626529.html
Copyright © 2011-2022 走看看