【luogu CF618G】Combining Slimes(矩阵乘法)(DP)
Combining Slimes
题目链接:luogu CF618G
题目大意
有一个长度为 n 的栈,如果栈顶两个值都是 x 就会合并成 x+1,一开始没有东西。
你有 p 的概率放进去一个 1,1-p 的概率放入 2,问你当栈被放满的时候,你的期望分数。
分数是栈里所有值的和。
思路
考虑统计每个位置的数的贡献。
由于某个位置的数会因为合并改变,考虑先搞点简单的,某个位置出现过:
为用了 个位置,最左边是 的概率:
初始:
转移:(就是后面的两个位置都是 ,合并成 )
发现 的时候 又要初始又要转移,那就特判一下都加上。
那我们要的不是出现过,而是它不会被合并掉,最后留了下来。
为用了 个位置,最左边是 而且不会被合并掉的概率:
初始化:
那我们就可以试着算算期望了:
为最后序列右边 位最左边是 的情况下,这 位的期望和。
那就直接枚举右边 位的,考虑一下范围。
不难想想,只有两种可能,要么是你自己是 ,它不是 ,要么它就比你小。
那个显然,如果你不是 ,它比你打一定要从至少 往上一步一步加,那 到它那个数之间的数都要经历过。
那到你那个数的时候就合并了啊!
然后发现 这个好像很特别,似乎要再 DP 一下:
为长度为 的,第一次放进来的是 ,最左边是 的概率:
初始化:
同样的道理,我们也要求不变的:
为长度为 ,第一次放进来是 ,最左边是 而且不会被合并的概率:
初始化:
这些都弄好之后,我们正式开始搞 的转移:
那我们就可以转移啦!
但是 很大,那你这个是 的啊。
发现一个事情,你会觉得它一直没有 接着 的情况其实会很少。
而且你要注意到你凑出 你至少需要 次。
那比如一个 ,那不出现 的概率就是 ,只要下面不是 基本上就宣告约等于 了。
那合并的概率也就是 。
也就是说,我们设 ,那 的时候,我们可以认为 。
然后发现 太大的 也不好搞啊,但是你看看那个式子:
, 也差不多。
那 很大的时候, 都很小,那 不也很小,那就 咯,直接忽略,所以也只用看到 。
(毕竟这题是有精度要求的,不是取模那些)
那再看式子:
然后我们如果把 的单独暴力处理,然后看 的部分:
怎么感觉,有点像那种递推的式子。
看看,会发现确实可以用 的矩阵表示 。
然后转移矩阵因为 都给你变成了 ,所以是固定的。
那直接上矩阵快速幂就可以啦!
代码
__EOF__

本文链接:https://www.cnblogs.com/Sakura-TJH/p/luogu_CF618G.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】