zoukankan      html  css  js  c++  java
  • 「考试」省选80

    T1
    仓鼠讲的(dp)嵌套原题。
    考虑对于一个确定的(T,V)如何(check)合法。
    (dp[i][a][b][c][d])为最高的前(i)位,(x)是否触及上界/下界,(y)是否触及上界/下界。
    那么我们把这个状态压一下。
    (dp[i][S])为所有可以由状态的集合(S)得到的(V)的个数。
    那么就可以转移了。
    复杂度是(O(602^{16}2^6))
    (if)剪掉大量的枝。

    T2
    按照步子分块。
    小于等于(B)的部分我们开(B)个线段树存,打整体加法标记。
    大于(B)的部分我们直接暴力模拟,用一个树状数组存,每次把位置大于(1e5)的跳蚤舍弃掉。
    考虑复杂度,是(O(BQlogQ+frac{Q}{B}QlogQ))
    这样的话我们的(B)(sqrt{Q})比较优秀,复杂度就是(O(Qsqrt{Q}logQ))得了。

    T3
    很久之前做的状压题的正解打法。
    我们把状态都找出来,然后发现(n=3)的时候有一个情况很特殊,第一格和第三格不属于同一个连通块和属于同一个连通块,这样要区分开。
    最终状态一共有9个。
    然后对于这些状态我们发现(dp)的转移可以用转移矩阵来表示,其中矩阵的每一个元素都是一个单项式。
    这样我们的(dp)定义变成多项式。
    然后发现直接乘复杂度爆炸了。
    我们分别带入单位元然后做矩阵快速幂求出点值,然后再逆向(IDFT)插回(dp)数组定义的多项式就可以了。

  • 相关阅读:
    OBV15 案例2
    OBV_X3
    涨停板割韭菜走势
    谁有stanford ner训练语料
    CUDA从入门到精通
    MatLab 2014a编译jar包时mcc无法使用的问题
    安装office2013时弹出microsoft setup bootstrapper已停止工作,接着就不能安装了
    Lingo 做线性规划
    C# 连接Paradox DB
    Numpy 数组的切片操作
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/12773899.html
Copyright © 2011-2022 走看看