码迷,mamicode.com
首页 > 其他好文 > 详细

重返现世——题解

时间:2020-07-10 23:54:47      阅读:78      评论:0      收藏:0      [点我收藏+]

标签:子集   范围   返现   通过   tps   数据   实现   display   https   

\(orz\)出题人,神仙题啊。

题目链接luogu P4707

  • 题意
    给一个\(n\)元集合\(S\),每一次从中选出一个元素,每一个元素被选出的概率为\(\frac{p_i}{m}\),求选出\(k\)个不同元素的期望次数。
    \(n<=1000\),\(|n-k|<=10\),\(m<=10000\),\(p_i<=m\),\(\sum p_i=m\)

  • 前置知识
    首先一看就知道要用\(min-max\)容斥,下面只给出式子,具体证明略。
    普通形式:

\[max(S)=\sum_{T \subseteq S} (-1)^{|T|-1} min(T) \]

  扩展(第\(k\)大):

\[kthmax(S)=\sum_{T\subseteq S} (-1)^{|T|-k} \binom{|T|-1}{k-1}min(T) \]

  \(min\)的求法同理。
  这东西可以扩展到期望。

  • 题解
    现在我们回到原题。
    \(k \to n-k+1\)
    这样就可以直接套\(kthmax\)的式子,即

\[E(kthmax(S))=\sum_{T\subseteq S} (-1)^{|T|-k} \binom{|T|-k}{k-1}E(min(T)) \]

  这样我们就得到了一个十分暴力的做法,直接枚举\(S\)\(2^n\)个子集,统计答案。
  很显然这样通过不了全部数据,考虑对这个进行优化。
  观察一下数据范围,有\(m<=10000\),限制了值域,所以我们考虑\(DP\)
  设\(f_{i,j,k}\)表示前\(i\)个元素,选出来的子集元素概率和为\(j\),是\(kth\)意义下的\(\sum_{T\subseteq S} (-1)^{|T|-k} \binom{|T|-1}{k-1}\)
  我们令\(S_i\)表示前\(i\)个元素组成的集合,那么上面的式子写成数学形式就是这样:

\[f_{i,j,k}=\sum_{T\subseteq S_i} [(\sum_{t\in T} pt)=j] (-1)^{|T|-k} \binom{|T|-1}{k-1} \]

  所以有

\[f_{i,j,k}=\sum_{T\subseteq S_{i-1}} [(\sum_{t\in T} pt)=j] (-1)^{|T|-k} \binom{|T|-1}{k-1}+\sum_{T\subseteq S_{i-1}} [(\sum_{t\in T} pt)=j-pi] (-1)^{|T|+1-k} \binom{|T|+1-1}{k-1} \]

  根据这个式子,我们对\(f\)的定义,以及组合数中的\(\binom{i}{j}=\binom{i-1}{j}+\binom{i-1}{j-1}\),可以得到

\[f_{i,j,k}=f_{i-1,j,k}+(-1)\sum_{T\subseteq S_{i-1}} [(\sum_{t\in T} pt)=j-pi] (-1)^{|T|-k} \binom{|T|-1}{k-1}+\sum_{T\subseteq S_{i-1}} [(\sum_{t\in T} pt)=j-pi] (-1)^{|T|-(k-1)} \binom{|T|-1}{k-2} \]

  所以

\[f_{i,j,k}=f_{i-1,j,k}-f_{i-1,j-p_i,k}+f_{i-1,j-p_i,k-1} \]

  这样主干就出来了。

  • 一些细节
    首先是边界,可以把\(i=1\)带进去手算,然后就有\(f_{0,0,0}=0, f_{0,0,k}=-1\)
    接着因为空间的限制,将\(i\)那一维滚动掉,这样就可以实现了。
    最后统计答案直接枚举\(j\),算一下就好。

重返现世——题解

标签:子集   范围   返现   通过   tps   数据   实现   display   https   

原文地址:https://www.cnblogs.com/leukocyte/p/13281969.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!