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

    A. 入阵曲

    求每一行的前缀和,

    枚举左右端点,O(n)扫下去,顺便更新桶。

    维护栈清空桶中的内容。


    B. 将军令

    k=1,小胖守皇宫弱化版。

    与小胖守皇宫比较,发现特殊性质:

    点没有权值。

    考虑贪心。

    每次找出深度最深的点,点亮它的k级父亲。

    1.点亮k级父亲比点亮它的任何一个儿子更优,因为能更多的覆盖到该子树外的节点。

    2.点亮k级父亲子树以外的点,不能覆盖到深度最深的点。

    综上,该贪心策略是正确的。

    考试时想到了这个贪心策略,

    然而受小胖守皇宫限制,固执地认为贪心一定不成立。

    那道题已经做过去很久,已经忘记了差异点。

    其实可以尝试一下贪心,打个对拍的。


    C. 星空

    区间翻转的修改很大,难处理。

    考虑如何将区间修改为单点。

    差分即可。

    设$a_i$表示第$i$盏灯的初始状态,1为灭,0为亮。

    设$b_i=a_i$^$a_{i+1}$,显然b的前缀和表示单点的a值。

    将区间修改$(l,r)$转化为单点修改$l-1$和$r$,将两个值取反就达到了区间修改的效果。

    要求的最终状态是b数列全为0。

    将两个0取反为1是没有意义的。

    有意义的移动是将一个1不断与0取反,直到两个1共同取反为0。

    bfs处理出一些1之间的路径,对不超过2k个1之间进行状压。

    复杂度为$O(2^{2k}*k^2+nmk)$

    然而dp转移有一些冗余。

    固定一个转移的顺序可以达到优化的效果。

    每次转移第一个1,复杂度为$O(2^{2k}*k+nmk)$。

  • 相关阅读:
    TextField KeyUp事件
    extjs 弹出windowsurl
    coolite TreePanel CheckBox联动
    自动生成储存过程及.net代码(sql2000,sql2005,sql2008)
    ComboBox三级关联
    ext window关闭
    DLL编写教程
    阿里云笔试题
    c/c++复杂声明的理解
    malloc/free与new/delete的区别
  • 原文地址:https://www.cnblogs.com/skyh/p/11334880.html
Copyright © 2011-2022 走看看