Select a result to preview
Stack
定义 f(p) 为对排列 p 跑一次单调栈之后栈中剩余元素的个数,求长度为 n 的所有排列的 (f(p))3 的和,一共有 T 组询问
借鉴了牛课讨论区的一个大佬的做法:链接
定义了 g(n,i) 表示长度为 n 的所有排列中 f(p)=i 的个数,我们要求的答案就是 S(n)=∑i=1ng(n,i)×i3
这是第一类斯特林数的一个定义,得到 g(n+1,i)=ng(n,i)+g(n,i−1)
试着计算 S(n+1) 的递推式
已知 ∑i=1ng(n,i) 表示所有排列方案,即 n!
然后观察到,∑i=1ng(n,i)×i3 就是 S(n),但是 ∑i=1ng(n,i)×i2 和 ∑i=1ng(n,i)×i 未知,我们分别把他们定义为 S2(n) 和 S1(n) 寻找他们的递推式
于是我们得到了递推式
其中 S(0)=S1(0)=S2(0)=0