• 重返现世——题解


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

    题目链接luogu P4707

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

    • 前置知识
      首先一看就知道要用\(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\le 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\),算一下就好。
  • 相关阅读:
    『Argparse』命令行解析
    『MXNet』专题汇总
    用.NET开发通用Windows App
    ASP.NET 5探险(6):升级ASP.NET 5到beta6
    使用ASP.NET MVC、Rabbit WeixinSDK和Azure快速开发部署微信后台
    Visual Studio 2015将在7月20号RTM
    VS2015上又一必备免费插件:Refactoring Essentials
    ASP.NET 5探险(5):利用AzureAD实现单点登录
    Visual Studio Code升级到0.5,提供对ES6的更好支持
    ASP.NET 5探险(4):如何把ASP.NET 5从beta4升级到beta5
  • 原文地址:https://www.cnblogs.com/leukocyte/p/13281969.html
Copyright © 2020-2023  润新知