zoukankan      html  css  js  c++  java
  • 乱记结论之OI常用四大数列

    一、斐波那契数列

    $f(0)=1,f(1)=1,f(i)=f(i-1)+f(i-2) (i>=2)$

    经典的解释是兔子生小孩,第0年一对兔子,一对兔子需要一年长大,后面每年都生小孩,每次刚好生一对,问第i年有多少只。就这么算。

    经典的应用是矩阵乘法!稍微写一下:

    egin{vmatrix}
    1 & 1 \
    1 & 0
    end{vmatrix} * egin{vmatrix}
    f(i) \
    f(i-1)
    end{vmatrix} = egin{vmatrix}
    f(i+1)\
    f(i)
    end{vmatrix}

    二、卡特兰数

    $C(0)=C(1)=1,C(n)=sum_{k=0}^{n-1} C(k)C(n-k-1)$

    $C(n)=C(2n,n)-C(2n,n-1)$

    $C(n)=C(n-1)*(4*n-2)/(n+1)$

    例子多了。出入栈序列,划分三角形,走格子不越过对角线,等等。

    两种理解方式:分治,分成两个部分变成式一;计数,在瞎构造的序列中挑掉不合法的,对应方案是把第一个遇到不合法的位置以前全部取反,后面不变,建立一个和C(2n,n-1)的对应关系。

    三、贝尔数

    $B(n)=sum_{k=0}^{n-1} C(n-1,k)B(k)$

    贝尔数是第二类斯特林数的一行的和,直接用上面方法可nlogn求一个贝尔数。

    如果要求一系列贝尔数,考虑最后一个元素所在集合大小,有$f(i)=sum_{k=1}^{i} C_{i-1}^{k-1}f(i-k)$,一卷积,前面对后面有贡献,可CDQ+FFT在$nlog^2n$时间求解。

    贴图都是不懂的。

    三点五、范德蒙恒等式

    $C_{n+m}^k=sum_{i=0}^{k}C_n^iC_m^{k-i}$

    证明用生成函数。

    四、斯特林数

    第二类:s(n,m)--n个元素分到m个相同盒子,$s(n,m)=s(n-1,m-1)+s(n-1,m)*m$

    还可以这么玩:不考虑是否空盒子,那答案就$frac{m^n}{m!}$,然后容斥一下,枚举几个空盒子,$s(n,m)=frac{1}{m!}*sum_{i=0}^{m}(-1)^iC_m^i(m-i)^n$,后面一卷积,可用多项式乘法得一行斯特林数。

    他喜欢和指数玩:$i^j=sum_{k=1}^{j}S(j,k)k!C_i^k$

    第一类:s(n,m)--n个元素排成m个圈圈,$s(n,m)=s(n-1,m-1)+s(n-1,m)*(n-1)$,排在每个数的左边。

    五、默慈金数

    $M(n)$--一个圆上n个点,问点间连线不相交的方案。或者在坐标轴上,一步之内可以往左往右或不动,问最后到原点的方案。

    一、$M(n+1)=M(n)+sum_{i=0}^{n-1}M(i)M(n-1-i)=frac{(2n+3)M(n)+3nM(n-1)}{n+3}$

    二、$M(n)=sum_{i=0}^{left lfloor frac{n}{2} ight floor}C_n^{2i}Cat(i)$

    (不是很懂这字咋变小了)

  • 相关阅读:
    全栈程工程师
    月薪8000的程序员和月薪2万的程序员差别在哪里?
    原型中的访问
    关于 基本类型和复合类型 用== 判断的小问题
    使用原型解决构造函数问题
    前端工程师学习路线 --书籍
    程序员成长之路
    GIT学习(1) Pull和Fetch
    OO面向对象编程:第四单元总结及课程总结
    OO面向对象编程:第三单元总结
  • 原文地址:https://www.cnblogs.com/Blue233333/p/8206718.html
Copyright © 2011-2022 走看看