link。
从 https://codeforces.com/blog/entry/76447 里面抄一个代数做法。
考虑朴素 dp:记 fi,j=fi−1,j+(j+ai)×fi−1,j−1,不太好做。
做变换 gi,j=fi,i−j,并记 bi=ai+i,则有 gi,j=gi−1,j−1+(bi−j)×gi−1,j。
其对应的 OGF 满足 Gi=x(Gi−1−G′i−1)+biGi−1。
根据高中数学,我们可以构造 Hi=Gie−x,则有 Hi=biHi−1−xH′i−1。
注意算子 ϑ=xddx 只和本位系数有关,也就是说有 hn,j=h0,j×∏i(bi−j)=(−1)jj!×∏i(bi−j)。
之后可以分治 fft 算出 B(x)=∏i(bi−x),然后多点求值求出 Hn。
但是在本题中我们只需要算 ∑ign,i,是否有更好的方法?
我们知道:
gn,m=∑j(−1)jj!×∏i(bi−j)×1(m−j)!=∑pBp×(∑j(−1)jj!×jn−p×1(m−j)!)
其中 Bp=[xp]∏i(bi−x),一样分治 fft 算出。
考虑将 jn−p 展开成下降幂形式:
∑j(−1)jj!×jn−p×1(m−j)!=∑k{n−pk}×(∑j(−1)jj!×(jk)×k!×1(m−j)!)=∑k{n−pk}×⎛⎝∑j(m−kj−k)(−1)j(m−k)!⎞⎠=(−1)m{n−pm}
则 ∑ign,i=∑pBp×(∑i(−1)i{n−pi})。接下来只需要计算 sn−p=∑i(−1)i{n−pi}。
继续用代数做法。设出 EGF:S(x)=∑sii!xi。代入:
S(x)=∑i∑m(−1)m{im}i!xi=∑m(−1)m(∑i{im}i!xi)=∑m(−1)m(ex−1)mm!=exp(1−ex)
做个多项式 exp 即可求出。这真的更优秀吗。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现