欧拉数

某天在考场上碰到了板题,但是没看出来,当场爆零。

简单来讲,nk 表示满足长度为 n 且恰好有 k 个位置满足 πi<πi+1 的排列 π (这样的位置后文记为“升高”)的个数。它的三角形前几行打出来长这样:

1

1    0

1    1    0

1    4    1    0

1   11   11   1   0

1  26   66   26   1  0

找规律?考场上找了很久也没找出来,还是老老实实dp。假设现在已经有了一个长度为 n 的排列,考虑 n 插入的位置带来的影响。

如果 n 插在最后边,则增加了一个升高,即有 n1k1 的贡献。
如果 n 插在最前边,相当于什么都没干,即有 n1k 的贡献。
如果 n 插在任意一个升高的中间,则破坏了一个升高又新增了一个,也相当于啥也没干。即有 kn1k 的贡献。
如果 n 插在不是任意一个升高的中间,则新增了一个升高。即有 (nk1)n1k1 的贡献。

把贡献累加起来,有递推式:

nk=(k+1)n1k+(nk)n1k1

然后这东西显然有对称性,即:

nk=nnk1

其实也可以用如下式子:

nk=i=0k(n+1i)(k+1i)n(1)i

证明的话数学归纳法,往递推式代再推一大坨就好。它显然是个卷积的形式,可以直接Θ(nlogn)求行。

容易注意到

xn=k=0nnk(x+kn)

posted @   Smallbasic  阅读(378)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示