小学生都看得懂的栈

本文介绍了如何运用卷积和牛顿二项式定理,结合动态规划来解决一种特殊的栈操作序列问题。通过建立生成函数,作者详细推导了求解序列权值和的公式,并给出了最终的解答方法。内容深入浅出,适合对算法和数学感兴趣的学习者。
摘要由CSDN通过智能技术生成

题目大意:

  • 1 → n 1\to n 1n 按顺序入栈,可以在任意“栈非空的时刻”弹出栈顶元素。

  • 以这种方法得到的出栈序列为合法的出栈序列. 定义一个出栈序列的权值为“每次有元素入栈时,将全部栈内元素的标号求和”的和.

  • 求所有不同的合法出栈序列的 c c c 的和,答案对 1 0 9 + 7 10^9 + 7 109+7 取模

  • 1 ≤ n ≤ 5 × 1 0 8 1\le n\le 5\times 10^8 1n5×108

Sol.

前置知识 1:卷积

右转oi-wiki,保教包会。 简单来说:多项式 A = ∑ i = 0 ∞ a i x i , B = ∑ i = 0 ∞ b i x i A=\sum\limits_{i=0}^\infty a_ix^i,B=\sum\limits_{i=0}^\infty b_ix^i A=i=0aixi,B=i=0bixi

A ∗ B = ∑ k = 0 ∞ ∑ i + j = k A [ i ] B [ j ] x k = ∑ i = 0 ∞ x i ∑ j = 0 i a j b i − j A*B=\sum\limits_{k=0}^{\infty}\sum\limits_{i+j=k}A[i]B[j]x^k=\sum\limits_{i=0}^\infty x^i\sum\limits_{j=0}^ia_jb_{i-j} AB=k=0i+j=kA[i]B[j]xk=i=0xij=0iajbij

前置知识 2:牛顿二项式定理

右转oi-wiki,保教包会。 简单来说: ( n m ) = n m ‾ m ! \dbinom nm=\dfrac{n^{\underline{m}}}{m!} (mn)=m!nm

x n ‾ = ∏ 0 n − 1 ( x − i ) x^{\underline n}=\prod_0^{n-1}(x-i) xn=0n1(xi)

准备一大叠草稿纸(一定要够用),再准备一包纸擦汗。准备好了吗?那么我们就开始吧。 哦对了,带够你的耐心,带够你的意志,深吸一口气。一定不要放弃!一定不要放弃!一定不要放弃! 一定不要放弃!

DP:

我们考虑 dp。

f i f_i fi 表示 1 → i 1\to i 1i 的所有出栈种类数。

g i g_i gi 表示 1 → i 1\to i 1i 的所有对“元素入栈时的元素个数”求和的权值和。

h i h_i hi 表示 1 → i 1\to i 1i 的答案。

f 0 = 1 f_0=1 f0=1

要求 h n h_n hn 转移方程: 我们考虑每次栈弹出最后弹出的元素为 j j j,那么有 j − 1 j-1 j1 个数已经在 j j j 弹入之前取出了,因此问题分为互相独立的两个部分。

f n = ∑ j = 1 n f j − 1 f i − j f_n=\sum\limits_{j=1}^n f_{j-1}f_{i-j} fn=j=1nfj1fij

g n = ∑ j = 1 n f j − 1 g i − j + g j − 1 f i − j + j × f j − 1 f i − j g_n=\sum\limits_{j=1}^n f_{j-1}g_{i-j}+g_{j-1}f_{i-j}+j\times f_{j-1}f_{i-j} gn=j=1nfj1gij+gj1fij+j×fj1fij

h n = ∑ j = 1 n f i − j × ( h j − 1 + g j − 1 × j ) + f j − 1 × ( h i − j + g i − j + f i − j × j ) h_n=\sum\limits_{j=1}^n f_{i-j}\times (h_{j-1}+g_{j-1}\times j)+f_{j-1}\times (h_{i-j}+g_{i-j}+f_{i-j}\times j) hn=j=1nfij×(hj1+gj1×j)+fj1×(hij+gij+fij×j)

f n = ∑ i = 0 n − 1 f i ∗ f j f_n=\sum\limits_{i=0}^{n-1}f_i*f_j fn=i=0n1fifj

g n = ∑ i = 0 n − 1 f i ∗ f j ∗ ( i + 1 ) + f j ∗ g i + f i ∗ g j g_n=\sum\limits_{i=0}^{n-1}f_i*f_j*(i+1)+f_j*g_i+f_i*g_j gn=i=0n1fifj(i+1)+fjgi+figj

h n = ∑ i = 0 n − 1 f i ∗ f j ∗ ( i + 1 ) + f j ∗ ( h i + g i ) + f i ∗ ( h j + ( i + 1 ) ∗ g j ) h_n=\sum\limits_{i=0}^{n-1}f_i*f_j*(i+1)+f_j*(h_i+g_i)+f_i*(h_j+(i+1)*g_j) hn=i=0n1fifj(i+1)+fj(hi+gi)+fi(hj+(i+1)gj)

对于 ①:每次 i + 1 i+1 i+1 把他们分为 i , j i,j i,j 两个部分,因为他们相互独立,所以互不影响,答案即为他们相乘的和。

对于 ②:我们考虑三个部分 A + B + C A+B+C A+B+C,其中 B B B 表示 i + 1 i+1 i+1

  • 对于 A A A 的贡献:由于 A , C A,C A,C 独立, A A A 的贡献为 g i × f j g_{i}\times f_{j} gi×fj

  • 对于 C C C 的贡献:由于 A , C A,C A,C 独立, C C C 的贡献为 g j × f i g_{j}\times f_{i} gj×fi

  • 对于 B B B 的贡献:由于在 i + 1 i+1 i+1 插入之前所有元素已经弹出(不然不成立),无论如何都会贡献 i + 1 i+1 i+1(一共有 i+1 个元素),方案数为 f i × f j f_{i}\times f{j} fi×fj,那么答案为 ( i + 1 ) × f i × f j (i+1)\times f_{i}\times f_{j} (i+1)×fi×fj

对于 ③:我们考虑三个部分 A + B + C A+B+C A+B+C,其中 B B B 表示 i + 1 i+1 i+1

  • 对于 A A A 的贡献:由于 A , C A,C A,C 独立,那么 A A A 的贡献为 f j × h i f_{j}\times h_{i} fj×hi

  • 对于 C C C 的贡献:由于 A , C A,C A,C 独立,那么 C C C 的贡献为 f i × h j + g i × ( i + 1 ) × f j f_{i}\times h_{j}+g_{i}\times (i+1)\times f_{j} fi×hj+gi×(i+1)×fj,后面那一项是因为每个元素都加了 j + 1 j+1 j+1

  • 对于 B B B 的贡献: ( i + 1 ) × f i × f j (i+1)\times f_{i}\times f_{j} (i+1)×fi×fj

    • 对于 A B AB AB 的贡献:显然没有贡献。
  • 对于 B C BC BC 的贡献:显然是 f j − 1 × g i − j f_{j-1}\times g_{i-j} fj1×gij

生成函数求解:

F:

F ( x ) = ∑ i = 0 F [ i ] x i F(x)=\sum\limits_{i=0} F[i]x^i F(x)=i=0F[i]xi

F ( x ) = 1 + ∑ i = 1 F [ i ] x i F(x)=1+\sum\limits_{i=1} F[i]x^i F(x)=1+i=1F[i]xi

F ( x ) = 1 + ∑ i = 1 ∑ j = 0 i − 1 F [ j ] F [ i − j − 1 ] x i F(x)=1+\sum\limits_{i=1}\sum\limits_{j=0}^{i-1}F[j]F[i-j-1]x^i F(x)=1+i=1j=0i1F[j]F[ij1]xi

F ( x ) = 1 + ∑ k = 0 ∑ i + j = k F [ i ] F [ j ] x k + 1 F(x)=1+\sum\limits_{k=0}\sum\limits_{i+j=k}F[i]F[j]x^{k+1} F(x)=1+k=0i+j=kF[i]F[j]xk+1

F ( x ) = 1 + x × F ( x ) 2 F(x)=1+x\times F(x)^2 F(x)=1+x×F(x)2

F ( x ) = 1 − 1 − 4 x 2 x F(x)=\dfrac{1-\sqrt {1-4x}}{2x} F(x)=2x114x

G:

根据上面的套路(把 0 ( G [ 0 ] = 0 G[0]=0 G[0]=0) 拿出来特殊考虑,其他的直接递归下去),可以得到:

( 1 − 2 x F ( x ) ) G ( x ) = ( i + 1 ) F ( x ) 2 x (1-2xF(x))G(x)=(i+1)F(x)^2x (12xF(x))G(x)=(i+1)F(x)2x

好的我们看到这个 ( i + 1 ) ∗ F ( x ) (i+1)*F(x) (i+1)F(x) 的时候已经懵逼了,那么先给个结论(之后证明)

( i + 1 ) ∗ F ( x ) = 1 − 4 x 1 − 4 x (i+1)*F(x)=\frac{\sqrt{1-4x}}{1-4x} (i+1)F(x)=14x14x

(这里 ( i + 1 ) ∗ F ( x ) = ∑ i = 0 ( i + 1 ) F [ i ] x i (i+1)*F(x)=\sum\limits_{i=0}(i+1)F[i]x^i (i+1)F(x)=i=0(i+1)F[i]xi

那么原式可以化简为: ( 1 − 2 x F ( x ) ) G ( x ) = F ( x ) x 1 − 4 x (1-2xF(x))G(x)=\dfrac{F(x)x}{\sqrt {1-4x}} (12xF(x))G(x)=14x F(x)x

1 − 2 x F ( x ) = 1 − 2 x 1 − 1 − 4 x 2 x = 1 − 4 x 1-2xF(x)=1-2x\dfrac{1-\sqrt {1-4x}}{2x}=\sqrt {1-4x} 12xF(x)=12x2x114x =14x

G ( x ) = F ( x ) x 1 − 4 x = 1 − 1 − 4 x 2 − 8 x G(x)=\dfrac{F(x)x}{1-4x}=\dfrac{1-\sqrt {1-4x}}{2-8x} G(x)=14xF(x)x=28x114x

H:

根据上面的套路(把 0 ( H [ 0 ] = 0 H[0]=0 H[0]=0) 拿出来特殊考虑,其他的直接递归下去),可以得到:

H ( x ) = ( G ( x ) + F ( x ) ) ∗ ( j + 1 ) ∗ F ( x ) + F ( x ) ∗ G ( x ) 1 − 2 x F ( x ) x H(x)=\dfrac{(G(x)+F(x))*(j+1)*F(x)+F(x)*G(x)}{1-2xF(x)}x H(x)=12xF(x)(G(x)+F(x))(j+1)F(x)+F(x)G(x)x

H ( x ) = G ( x ) + F ( x ) 1 − 4 x + F ( x ) ∗ G ( x ) 1 − 4 x x H(x)=\dfrac{\dfrac{G(x)+F(x)}{\sqrt{1-4x}}+F(x)*G(x)}{\sqrt{1-4x}}x H(x)=14x 14x G(x)+F(x)+F(x)G(x)x

H ( x ) = ( F ( x ) x 1 − 4 x + F ( x ) ) × 1 1 − 4 x + F ( x ) 2 x 1 − 4 x 1 − 4 x x H(x)=\dfrac{(\dfrac{F(x)x}{1-4x}+F(x))\times \dfrac{1}{\sqrt{1-4x}}+\dfrac{F(x)^2x}{1-4x}}{\sqrt{1-4x}}x H(x)=14x (14xF(x)x+F(x))×14x 1+14xF(x)2xx

H ( x ) = F ( x ) × 1 − 3 x 1 − 4 x × 1 1 − 4 x + F ( x ) 2 × x 1 − 4 x 1 − 4 x x H(x)=\dfrac{F(x)\times\dfrac{1-3x}{1-4x}\times \dfrac{1}{\sqrt{1-4x}}+F(x)^2\times \dfrac{x}{1-4x}}{\sqrt{1-4x}}x H(x)=14x F(x)×14x13x×14x 1+F(x)2×14xxx

H ( x ) = 1 − 1 − 4 x 2 x × 1 − 3 x 1 − 4 x × 1 1 − 4 x + 1 − 2 x − 1 − 4 x 2 x 2 × x 1 − 4 x 1 − 4 x x H(x)=\dfrac{\dfrac{1-\sqrt {1-4x}}{2x}\times\dfrac{1-3x}{1-4x}\times \dfrac{1}{\sqrt{1-4x}}+\dfrac{1-2x-\sqrt{1-4x}}{2x^2}\times \dfrac{x}{1-4x}}{\sqrt{1-4x}}x H(x)=14x 2x114x ×14x13x×14x 1+2x212x14x ×14xxx

H ( x ) = ( 1 − 1 − 4 x ) ( 1 − 3 x ) 2 x 1 − 4 x ( 1 − 4 x ) + ( 1 − 2 x − 1 − 4 x ) 1 − 4 x 2 x 1 − 4 x ( 1 − 4 x ) 1 − 4 x x H(x)=\dfrac{\dfrac{(1-\sqrt{1-4x})(1-3x)}{2x\sqrt{1-4x}(1-4x)}+\dfrac{(1-2x-\sqrt {1-4x})\sqrt{1-4x}}{2x\sqrt{1-4x}(1-4x)}}{\sqrt{1-4x}}x H(x)=14x 2x14x (14x)(114x )(13x)+2x14x (14x)(12x14x )14x x

H ( x ) = ( 1 − 1 − 4 x ) ( 1 − 3 x ) + ( 1 − 2 x − 1 − 4 x ) 1 − 4 x 2 ( 1 − 4 x ) 2 H(x)=\dfrac{(1-\sqrt{1-4x})(1-3x)+(1-2x-\sqrt{1-4x})\sqrt{1-4x}}{2(1-4x)^2} H(x)=2(14x)2(114x )(13x)+(12x14x )14x

H ( x ) = 1 + 1 − 4 x 2 ( 1 − 4 x ) 2 x H(x)=\dfrac{1+\sqrt{1-4x}}{2(1-4x)^2}x H(x)=2(14x)21+14x x

H ( x ) = x 2 ( 1 − 4 x ) 2 + x 2 ( 1 − 4 x ) 3 2 H(x)=\dfrac{x}{2(1-4x)^2}+\dfrac{x}{2(1-4x)^\frac{3}{2}} H(x)=2(14x)2x+2(14x)23x

A ( x ) = x 2 ( 1 − 4 x ) 2 A(x)=\dfrac{x}{2(1-4x)^2} A(x)=2(14x)2x

B ( x ) = x 2 ( 1 − 4 x ) 3 2 B(x)=\dfrac{x}{2(1-4x)^\frac{3}{2}} B(x)=2(14x)23x

H ( x ) = A ( x ) + B ( x ) H(x)=A(x)+B(x) H(x)=A(x)+B(x)

A:

s = 1 ( 1 − 4 x ) 2 s=\dfrac{1}{(1-4x)^2} s=(14x)21

s = ( 1 − 4 x ) − 2 s=(1-4x)^{-2} s=(14x)2

s = ∑ n ≥ 0 ∞ ( − 2 n ) ( − 4 x ) n s=\sum\limits_{n\ge 0}^\infty \dbinom{-2}{n}(-4x)^n s=n0(n2)(4x)n(牛顿二项式定理)

下面是广义二项式系数的常用化简方式

t = ( − 2 n ) t=\dbinom{-2}n t=(n2)

t = ( − 2 ) n ‾ n ! t=\dfrac{(-2)^{\underline n}}{n!} t=n!(2)n(牛顿二项式定理)

t = ( − 2 ) × ( − 3 ) × ( − 4 ) . . . ( − 2 − n + 1 ) n ! t=\dfrac{(-2)\times (-3)\times (-4)...(-2-n+1)}{n!} t=n!(2)×(3)×(4)...(2n+1)(下降幂定义)

t = ( n + 1 ) ! ( − 1 ) n n ! t=\dfrac{(n+1)!(-1)^n}{n!} t=n!(n+1)!(1)n

t = ( n + 1 ) ( − 1 ) n t=(n+1)(-1)^n t=(n+1)(1)n

回带: s = ∑ n ≥ 0 ∞ ( n + 1 ) ( − 1 ) n ( − 1 ) n 4 n x n s=\sum\limits_{n\ge 0}^\infty (n+1)(-1)^n(-1)^n4^nx^n s=n0(n+1)(1)n(1)n4nxn

s = ∑ n ≥ 0 ∞ ( n + 1 ) 4 n x n s=\sum\limits_{n\ge 0}^\infty (n+1)4^nx^n s=n0(n+1)4nxn

回带: A ( x ) = x 2 s A(x)=\dfrac{x}{2}s A(x)=2xs

A ( x ) = ∑ n ≥ 0 ∞ ( n + 1 ) 4 n x n + 1 2 A(x)=\dfrac{\sum\limits_{n\ge 0}^\infty (n+1)4^nx^{n+1}}{2} A(x)=2n0(n+1)4nxn+1

A ( x ) = 1 2 ∑ n ≥ 0 ∞ n 4 n − 1 x n A(x)=\dfrac{1}{2}\sum\limits_{n\ge 0}^\infty n4^{n-1}x^{n} A(x)=21n0n4n1xn (如果直接换条件为 n ≥ 1 n\ge 1 n1,但鉴于n=0时并不会影响答案,就直接这样了)

B: 令 s = 1 ( 1 − 4 x ) 3 2 s=\dfrac{1}{(1-4x)^\frac{3}{2}} s=(14x)231

s = ( 1 − 4 x ) − 3 2 s=(1-4x)^{-\frac32} s=(14x)23

s = ∑ n ≥ 0 ∞ ( − 3 2 n ) ( − 4 x ) n s=\sum\limits_{n\ge 0}^\infty \dbinom{-\frac 32}{n}(-4x)^n s=n0(n23)(4x)n(牛顿二项式定理)

t = ( − 3 2 n ) t=\dbinom {-\frac32}n t=(n23)

t = ( − 3 2 ) n ‾ n ! t=\dfrac{(-\frac 32)^{\underline n}}{n!} t=n!(23)n(牛顿二项式定理)

t = ( − 3 2 ) ( − 5 2 ) ( − 7 2 ) . . . ( − 3 2 − n + 1 ) n ! t=\dfrac{(-\frac 32)(-\frac 52)(-\frac 72)...(-\frac 32-n+1)}{n!} t=n!(23)(25)(27)...(23n+1)(下降幂定义)

t = ( − 1 ) n ( 2 n + 1 ) ! ! 2 n n ! t=\dfrac{(-1)^n(2n+1)!!}{2^nn!} t=2nn!(1)n(2n+1)!!(双阶乘不会可以百度)

t = ( − 1 ) n ( 2 n + 2 ) ! 2 n n ! ( 2 n + 2 ) ! ! t=\dfrac{(-1)^n(2n+2)!}{2^nn!(2n+2)!!} t=2nn!(2n+2)!!(1)n(2n+2)!(用双阶乘定义解释)

t = ( − 1 ) n ( 2 n + 2 ) ! 2 2 n + 1 n ! ( n + 1 ) ! t=\dfrac{(-1)^n(2n+2)!}{2^{2n+1}n!(n+1)!} t=22n+1n!(n+1)!(1)n(2n+2)!(双阶乘每个拆一个 2)

t = ( − 1 ) n ( 2 n + 2 ) 2 2 n + 1 ( 2 n + 1 n ) t=\dfrac{(-1)^n(2n+2)}{2^{2n+1}}\dbinom{2n+1}n t=22n+1(1)n(2n+2)(n2n+1)(上式像不像组合数?拆出来看看)

t = ( − 1 ) n ( n + 1 ) 4 n ( 2 n + 1 n ) t=\dfrac{(-1)^n(n+1)}{4^n}\dbinom{2n+1}n t=4n(1)n(n+1)(n2n+1)

回带: s = ∑ n ≥ 0 ∞ ( − 1 ) n ( n + 1 ) 4 n ( 2 n + 1 n ) ( − 4 x ) n s=\sum\limits_{n\ge 0}^\infty \dfrac{(-1)^n(n+1)}{4^n}\dbinom{2n+1}n(-4x)^n s=n04n(1)n(n+1)(n2n+1)(4x)n

s = ∑ n ≥ 0 ∞ ( − 1 ) n ( n + 1 ) 4 n ( 2 n + 1 n ) ( − 1 ) n 4 n x n s=\sum\limits_{n\ge 0}^\infty \dfrac{(-1)^n(n+1)}{4^n}\dbinom{2n+1}n(-1)^n4^nx^n s=n04n(1)n(n+1)(n2n+1)(1)n4nxn

s = ∑ n ≥ 0 ∞ ( n + 1 ) ( 2 n + 1 n ) x n s=\sum\limits_{n\ge 0}^\infty (n+1)\dbinom{2n+1}nx^n s=n0(n+1)(n2n+1)xn

回带: B ( x ) = x 2 s B(x)=\dfrac{x}{2}s B(x)=2xs

B ( x ) = x 2 ∑ n ≥ 0 ∞ ( n + 1 ) ( 2 n + 1 n ) x n B(x)=\dfrac{x}{2}\sum\limits_{n\ge 0}^\infty (n+1)\dbinom{2n+1}nx^n B(x)=2xn0(n+1)(n2n+1)xn

B ( x ) = 1 2 ∑ n ≥ 0 ∞ ( n + 1 ) ( 2 n + 1 n ) x n + 1 B(x)=\dfrac{1}{2}\sum\limits_{n\ge 0}^\infty (n+1)\dbinom{2n+1}nx^{n+1} B(x)=21n0(n+1)(n2n+1)xn+1

B ( x ) = 1 2 ∑ n ≥ 0 ∞ n ( 2 n − 1 n − 1 ) x n B(x)=\dfrac{1}{2}\sum\limits_{n\ge 0}^\infty n\dbinom{2n-1}{n-1}x^n B(x)=21n0n(n12n1)xn

A ( x ) = 1 2 ∑ n ≥ 0 ∞ n 4 n − 1 x n A(x)=\dfrac{1}{2}\sum\limits_{n\ge 0}^\infty n4^{n-1}x^{n} A(x)=21n0n4n1xn

回带: H ( x ) = A ( x ) + B ( x ) = ∑ n ≥ 0 ∞ n 2 ( 4 n − 1 + ( 2 n − 1 n − 1 ) ) x n H(x)=A(x)+B(x)=\sum\limits_{n\ge 0}^\infty \dfrac{n}{2}(4^{n-1}+\dbinom{2n-1}{n-1})x^n H(x)=A(x)+B(x)=n02n(4n1+(n12n1))xn

H [ n ] = n 2 ( 4 n − 1 + ( 2 n − 1 n − 1 ) ) H[n]=\dfrac{n}{2}(4^{n-1}+\dbinom{2n-1}{n-1}) H[n]=2n(4n1+(n12n1))

证毕!

结语:

感谢你看到这里。这应该说明你已经掌握了生成函数基础了! 对于上文有一个说最后再证明的,我觉得你们现在的基础应该也不需要我证明了! 自行二项式展开即可。

因为卡特兰数是 1 − 1 − 4 x 2 x = ( 2 n n ) n + 1 \dfrac{1-\sqrt{1-4x}}{2x}=\dfrac{\dbinom{2n}n}{n+1} 2x114x =n+1(n2n)

因此能想到用 1 − 4 x \sqrt{1-4x} 14x 的幂构造。

写到这里很不容易了!如果你觉得我写的还不错的话,请点赞评论支持我哦!

我是城阙,我们下次再见。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值