【UOJ #214】合唱队形【min-max容斥】【DP】
Description
请去传送门阅读。
Solution
考虑\(Min-Max\)容斥,我们要求的是所有长为\(m\)的串成功匹配的时间的最小值的期望,将这个作为\(Min(S)\)
那么
\[ans=\sum_{T\subseteq S}(-1)^{|T|-1}E(Max(T))
\]
而\(Max(T)\)就是\(T\)中所有串全部匹配的期望时间,将其转化为所有时刻没有成功匹配的概率之和,在\(t\)时刻没有成功匹配的概率,我们通过容斥没有匹配的位置数量来完成,设\(g(T)\)表示\(T\)中所有串全部匹配需要的课程数,\(sum\)为课程总数,即:
\[Max(T)=\sum_{t=0}^{\infty}\sum_{i=0}^{g(T)}(-1)^{i+1}\binom{g(T)}{i}(\frac{sum-i}{sum})^t\\
=\sum_{i=0}^{g(T)}(-1)^{i+1}\binom{g(T)}{i}\sum_{t=0}^{\infty}(\frac{sum-i}{sum})^t\\
=\sum_{i=0}^{g(T)}(-1)^{i+1}\binom{g(T)}{i}\frac{sum}{i}
\]
于是直接枚举\(T\)即可达到\(\mathcal O(2^{n-m}nm)\)的复杂度。期望得分\(50\)分(我修改了\(subtask\))。
注意到\(g(T)\)相同的\(T\)贡献是完全相同的,考虑先计算出\(g(T)=k\)的\(T\)的个数,考虑\(dp\),因为只有前\(m\)个串会影响当前串对\(g(T)\)的影响,所以设\(f_{i,s,j}\)表示考虑了前\(i\)个串,前\(m\)个串是否在\(T\)中的状态为\(s\),\(g(T)=j\)时\(T\)的总数,直接枚举当前位置的串是否选择转移即可。复杂度为\(\mathcal O(2^m n^2m)\),与上一部分结合即可拿到满分。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步