【题解】「NOIP2024模拟赛27 T4」构造数据

【题解】「NOIP2024模拟赛27 T4」构造数据

https://www.becoder.com.cn/contest/5736/problem/4


Description

原题:https://www.luogu.com.cn/problem/P8863


Solution

设:m=i=1nbi2,也就是总操作次数。

先记录一下之前的思路:

把一个操作看作选两个下标匹配。

fi,j:前 i 个剩下 j 个没有匹配的方案数。

枚举第 i 个和前 i1 个匹配的个数 k 转移:

fi,j=k=0bi(jk)gfi1,j+2kbi

这个 g 是这 k 个匹配在整个操作序列中位置带来的贡献,跟前 i1 个剩下的 j2kbi​ 个未匹配的下标有关系(如果 i 跟前 i1 中同一个下标匹配多次,因为考虑相对顺序会算重),如果暴力维护这个系数的话,感觉很复杂。

贡献提前计算!!!

又是这个……

我知道了!只要系数不好做并且依赖于以前的状态的时候就可以想到贡献提前计算。

其实整个过程也可以看作给 m 此操作分配二元组的过程。(就是官解中给的转换过程。

我们不妨也给那些没有匹配的,先在这 m 个操作中找到她们应该在的位置,后面再选到她们的时候相当于已经确定了顺序,也就不用考虑这个 g 系数了。

具体的:

fi,j=k=0bi(jk)(mpreij2jbik)fi1,j+2kbi

乍看之下时间复杂度是 O(nm2) 的,但是注意到 k 不会超过 bi,所以整个时间复杂度为 O(m2)

把数组滚动一下,空间复杂度就对了。

posted @   CloudWings  阅读(15)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示