• [总结] Min-Max容斥学习笔记


    min-max 容斥

    给定集合 (S) ,设 (max(S))(S) 中的最大值,(min(S))(S) 中的最小值,则:

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

    这个东西叫 min-max容斥。

    证明可以拿二项式反演证

    例题

    hdu4336 Card Collector

    题目

    (n) 种卡片,每一秒都有 (P_i) 的概率获得一张第 (i) 种卡片,求每张卡片都至少有一张的期望时间。

    (max(S))(S) 中最后获得的那种卡片第一次获得的期望时间, (min(S))(S) 中第一个获得的那种卡片第一次获得的期望时间,仍然满足:

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

    又因为 (min(T)=frac 1{sumlimits_{iin T}P_i})

    直接算就行了。

    HAOI2015 按位或

    题目

    (max(S))(S) 中最后被或到的元素第一次被或到的期望时间, (min(S))(S) 中第一个被或到的元素第一次被或到的期望时间,还是那个式子:

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

    但是这里互相不是独立的,怎么算 (min(T))

    [min(T)=frac 1{sum_{Scap T e emptyset} P_S} ]

    也就是所有与 (T) 有交的集合 (S) 的概率之和

    正难则反,求出所有与 (T) 交集为空的集合 (S') 的概率之和,则它们的补集就是与 (T) 有交的集合 (S)

    求出 (S') 的概率之和拿 (1) 再减掉就好啦。这个东西拿 (FWT) 或者 (FMT) 都阔以优化一哈。

    推广 kth min-max 容斥

    [max(S,k)=sum_{Tin S}(-1)^{|T|-k}cdot C(|T|-1,k-1)cdot min(T) ]

    其中 (max(S,k)) 表示 (S) 集合中第 (k) 大的元素。

    例题

    重返现世

    题目

    全网就这一道 kth min-max 容斥orz

    首先式子还是那个式子,但是这里的 (n)(1000),不能 (2^n) 枚举子集。考虑递推系数求解。

    (min(T)=frac m{sum(T)}),其中 (sum(T)=sumlimits_{iin T}p_i)

    (f[i][j][x]) 表示前 (i) 个元素,选的 (sum(T))(j),且将 (k=x) 代入式子后前面那一大串系数的值。

    这样设状态的原因就是把等价类划分到了一起,并且容易递推。

    由组合数的性质 (C_n^m=C_n^{n-m},C_n^m=C_{n-1}^m+C_{n-1}^{m-1})

    可以列出 (DP) 转移 (f[i][j][x]=f[i-1][j][x]+(f[i-1][j-p[i]][x-1]-f[i-1][j-p[i]][x]))

    可以拿组合数证。

  • 相关阅读:
    人工智能搜索算法(深度优先、迭代加深、一致代价、A*搜索)
    四.redis 事务
    三.redis 排序
    二.redis 数据类型
    一.redis 环境搭建
    Redis几个认识误区
    key-list类型内存数据引擎介绍及使用场景
    牛人推荐机器学习网站
    Android Studio 快捷键整理分享
    人工智能和机器学习领域中有趣的开源项目
  • 原文地址:https://www.cnblogs.com/YoungNeal/p/10300654.html
Copyright © 2020-2023  润新知