【学习笔记】CF1608F MEX counting
考虑一个非常简单的问题:给定 M E X MEX MEX序列,怎么算方案数。
我尝试从后往前做,然而发现要多记录一维状态表示已经出现的 M E X MEX MEX种类,难以为继。
首先将 1 ∼ i 1\sim i 1∼i的数分成两类,一类是 < M E X i <MEX_i <MEXi,这些数对后面的结果不会产生影响,一类是 > M E X i >MEX_i >MEXi,称其为好的元素,我们只关心它的数量。进一步的,相同种类的元素可以看成一个,因此只考虑其种类数。
那么转移无非只有几种:
1.1
1.1
1.1
a
i
+
1
<
M
E
X
i
a_{i+1}<MEX_i
ai+1<MEXi,显然有
M
E
X
i
+
1
=
M
E
X
i
MEX_{i+1}=MEX_i
MEXi+1=MEXi,转移系数为
M
E
X
i
MEX_i
MEXi
1.2
1.2
1.2
a
i
+
1
>
M
E
X
i
a_{i+1}>MEX_i
ai+1>MEXi,同样有
M
E
X
i
+
1
=
M
E
X
i
MEX_{i+1}=MEX_i
MEXi+1=MEXi,这个好的元素可以新开一个种类,或者合并到原有的种类中去
1.3
1.3
1.3
a
i
+
1
=
M
E
X
i
a_{i+1}=MEX_i
ai+1=MEXi,那么
M
E
X
i
+
1
>
M
E
X
i
MEX_{i+1}>MEX_i
MEXi+1>MEXi,注意
a
i
+
1
a_{i+1}
ai+1已经固定了,要将
(
M
E
X
i
,
M
E
X
i
+
1
)
(MEX_i,MEX_{i+1})
(MEXi,MEXi+1)之间填满,记
D
=
M
E
X
i
+
1
−
M
E
X
i
−
1
D=MEX_{i+1}-MEX_i-1
D=MEXi+1−MEXi−1,
k
k
k表示好的元素的数目,方案数
A
k
D
A_{k}^{D}
AkD
暴力转移复杂度 O ( n 2 k 2 ) O(n^2k^2) O(n2k2)。这道题神奇的地方在于可以进一步优化。这也非常简单,相当于 M E X MEX MEX那一维平移一格,系数只和 k k k那一维有关所以在转移的同时算一下转移系数就做完了。
复杂度 O ( n 2 k ) O(n^2k) O(n2k)。
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17529988.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」