zoukankan      html  css  js  c++  java
  • 常系数齐次线性递推

    常系数齐次线性递推

    名字的来由大概是系数是常数,次数相同的线性递推。

    形式

    形如

    [a_n=sum_{i=1}^ka_{n-i}*b_i ]

    题目

    现在给你(a,b)数组,求(a_n),满足(n ge k)

    Newbie(我)的做法

    直接暴力枚举,复杂度(Theta(n*k))

    Naive(HYJ)的做法

    考虑每一次转移都是相同的,所以可以把(b)写到矩阵里面然后矩阵快速幂转移。

    Master(_zzy)的做法

    前置知识

    特征多项式和特征方程(自行百度)

    推导

    现在我们要求的就是(b^n),一般的矩阵快速幂复杂度(k^3logn),所以我们需要奇技淫巧。

    (b^n=phi(B)*P(B)+Q(B)),又因为(phi(B)=0),所以(Q(B)=b^n)

    此时我们要求的就是(Q(B)),然后它是一个和(phi(B))拥有同样项数(k)的多项式,所以复杂度变成了(k^2log^2n)

    还可以进一步优化,即(Q(B))每一次长度会(*2),但是我们可以只去前(k)位,把后面的系数补上来,这样就做完了。

    于是我们推出了一些形如

    [a_n=sum_{i=1}^ka_{n-i}*b_i ]

    的式子的快一点点的求法!

    BZOJ4161 Shlw loves matrixI

    直接按照上文的方法做就行了。但是由于(BZOJ)机子太快了我(TLE(80s))了。

    如果是(CJ)的同学可以去(MOJ)提交(当然如果你像( exttt{hyj})一样快就没必要了)

  • 相关阅读:
    团队项目-典型用户及用户场景分析
    课堂小练习-找“水王”
    课堂小练习—电梯
    团队项目—用户需求调研报告
    课堂小练习
    团队项目的NABC
    梦断代码—随笔三
    梦断代码—随笔二
    结对开发5_循环二维数组最大字数组
    结对开发4_循环数组的最大值
  • 原文地址:https://www.cnblogs.com/mleautomaton/p/11432428.html
Copyright © 2011-2022 走看看