「考试」 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]=\sum\limits_{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]=\sum\limits_{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]=\sum\limits_{k=1}^{j}g[i-1][j-k]2^{j-k}C_{j}^{k}$

展开组合数。

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

那么也就是说

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

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

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

引入泰勒公式。

$+\infty$为正无穷。

对于任何一个函数$f$

$f(x)=\sum\limits_{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)=\sum\limits_{i=0}^{+\infty}\frac{f^{(i)}(x_0)(x-x_0)^i}{i!}$

  得到泰勒公式的结论了。

证毕。

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

证明:

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

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

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

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

  两侧取导。

  $e^x=0+\sum\limits_{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_0\sum\limits_{i=0}^{+\infty}\frac{x^i}{i!}$

  当$x=0$时

  $e^x=1=a_0\sum\limits_{i=0}^{+\infty}\frac{x^i}{i!}$

  $a_0=1$

  $e^x=\sum\limits_{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{\sum\limits_{k=1}^{j}g[i-1][j-k]2^{j-k}}{(j-k)!}\frac{1}{k!}$

那么也就等价于。

$(G_i(x))[x^j]=\sum\limits_{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)=\prod\limits_{i=0}^{n-1}(e^{2^ix}-1)$

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

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

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

常数巨大。

posted @ 2019-09-25 21:35  Lrefrain  阅读(266)  评论(1编辑  收藏  举报