zoukankan      html  css  js  c++  java
  • 「考试」 Or

    不得不说是一道多项式神题了。

    虽然说颓代码颓的很厉害不过最终A掉了。

    好好讲一讲这道题。

    涉及的知识点是:高阶导数,NTT,指数型母函数,泰勒公式,以及意志力和数学推导能力

    那就开始了。

    一个测试点一个测试点来。

    首先注意到$b[i]=lim_{i=1}^{i<=n}(|=a[i])$

    1.$n,k<=4$ 直接爆搜。$O(2^{nk})$

    2.$n,k<=10$考虑状压dp。

    设$dp[i][s]$为$a$的$i$项前缀或和。

    那么有转移$dp[i+1][s|t]+=dp[i][s]*[(s|t)!=s]$

    这样是$O(n4^{k})$

    3.$n,k<=300$。

    首先优化状压dp,我们其实并不关心状压dp中状态的1是那些1,我们只关心有几个1。

    那么得到$dp[i][j]$前$i$位的$a$或和中有$j$个1,且清楚是哪些1的方案数。

    $dp[i][j]=sumlimits_{k=0}^{j-1}dp[i-1][k]2^kC_{K-k}^{j-k}$

    复杂度是$O(nk^2)$

    4.59分

    优化上述$dp$

    其实可以看到卷积的影子吧。

    设$g[i][j]$前$i$位的$a$或和中有$j$个1,不清楚是那些1的方案数。

    $g[i][j]=sumlimits_{k=0}^{j-1}g[i-1][k]2^kC_j^{j-k}$

    那么$dp[i][j]=C_K^jg[i][j]$

    可以看出来g是一个卷积的形式了。

    那么复杂度$O(nklogk)$

    5.AC

    优化上述dp。

    改变g的枚举方式。

    $g[i][j]=sumlimits_{k=1}^{j}g[i-1][j-k]2^{j-k}C_{j}^{k}$

    展开组合数。

    $g[i][j]=sumlimits_{k=1}^{j}g[i-1][j-k]2^{j-k}frac{j!}{k!(j-k)!}$

    那么也就是说

    $frac{g[i][j]}{j!}=frac{sumlimits_{k=1}^{j-1}g[i-1][j-k]2^{j-k}}{(j-k)!}frac{1}{k!}$

    可以看出指数型母函数的样子了。

    生成函数$G(x)=sumlimits_{k=1}^{j-1}frac{g[i][j]}{j!}$

    引入泰勒公式。

    $+infty$为正无穷。

    对于任何一个函数$f$

    $f(x)=sumlimits_{i=0}^{+infty}frac{f^{(i)}(x_0)(x-x_0)^i}{i!}$

    证明:

      对$f^{(m)}(x_0)(x-x_0)^m$求$m$阶导。

      首先$x^n$的导数为$nx^{n-1}$

      那么

      1.$mf^{(m)}(x_0)(x-x_0)^{m-1}$

      2.$m(m-1)f^{(m)}(x_0)(x-x_0)^{m-2}$

      ......

      m.$m!f^{(m)}(x_0)$

      在往后都是0了,$m!f(x_0)$是常数。

      那么其实$f^{(m)}(x_0)=m!f(x_0)$因为其他项带$(x-x_0)$,所以都是0。

      除掉$m!$

      $f(x)=sumlimits_{i=0}^{+infty}frac{f^{(i)}(x_0)(x-x_0)^i}{i!}$

      得到泰勒公式的结论了。

    证毕。

    第二个引理$e^x=sumlimits_{i=0}^{+infty}frac{x^i}{i!}$

    证明:

      首先$e^x$的导数仍然是$e^x$

      $e^x=sumlimits_{i=0}^{+infty}frac{f^{(i)}(x_0)(x-x_0)^i}{i!}$

      设$frac{f^{(i)}(x_0)}{i!}=a_i$

      $e^x=sumlimits_{i=0}^{+infty}frac{a_i(x-x_0)^i}{i!}$

      两侧取导。

      $e^x=0+sumlimits_{i=1}^{+infty}ia_{i-1}(x-x_0)^{i-1}$

      $a_0=a_1$

      $a_1=2a_2$

      $a_2=3a_3$

      ...

      $a_{n-1}=na_n$

      那么解得$a_i=frac{a_0}{i!}$

      回代。

      $e^x=a_0sumlimits_{i=0}^{+infty}frac{x^i}{i!}$

      当$x=0$时

      $e^x=1=a_0sumlimits_{i=0}^{+infty}frac{x^i}{i!}$

      $a_0=1$

      $e^x=sumlimits_{i=0}^{+infty}frac{x^i}{i!}$

    证毕。

    推推式子得到了$G_i(x)=G_{i-1}(2x)*(e^x-1)$是卷积。

    用$(G(x))[x^i]$代表多项式$G(x)$在$x^i$处的系数。

    代入$frac{g[i][j]}{j!}=frac{sumlimits_{k=1}^{j}g[i-1][j-k]2^{j-k}}{(j-k)!}frac{1}{k!}$

    那么也就等价于。

    $(G_i(x))[x^j]=sumlimits_{k=1}^{j}(G_{i-1}(x))[x^{j-k}]2^{j-k}((e^x)[x^k])$

    解释一下。

    $G(2x)$在$[x^k]$的系数是$frac{g[i-1][k]}{k!}2^k$

    $e^x$在$[x^k]$的系数是$frac{1}{k!}$

    好那么有这个式子了。

    继续。

    $G_0(x)=1$

    回代得到。

    $G_n(x)=prodlimits_{i=0}^{n-1}(e^{2^ix}-1)$

    这个形式可以用类似快速幂的方式优化。

    快速幂我不知道怎么想出来的只知道是对的。

    那么也就是说可以在$O(nlog^2n)$时间内解决。

    常数巨大。

  • 相关阅读:
    js-html音乐播放
    CSS-实现倒影效果box-reflect
    html-屏蔽按键盘空格键是滚动条向下滚动
    html-禁用右键、键盘F12、网页上选取内容、复制、粘贴
    js-回调函数
    man bash 关于shell的应有尽有 语法、快捷键...
    source vs export AND ctrl d vs ctrl z
    技术----阳春
    限流 降级
    linux TOP
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11587631.html
Copyright © 2011-2022 走看看