• #4746. 我家钥匙放在哪了


    题目描述

    有 $n$ 个无区别的锁, $N$ 把无区别的钥匙都被藏, $M$ 个藏钥匙的地方,每个藏钥匙的地方最多藏 $a_i$ 个钥匙,并且这个地方被发现的概率为 $p_i$ ,求所有藏钥匙的方案能够找到至少 $n$ 个的概率之和。

    数据范围

    所有测试数据满足 $1 leq M leq 100,1 leq n leq N leq sum a_{i}, 1 leq N, a_{i} leq 10^{9}, 1 leq d leq 10^{7}, 0 leq p_{i}<998244353,N leq 100 d, d |left(a_{i}+1 ight)$ ,但并不保证 $d | N$ 或 $d | n$ 。

    题解

    orzsz

    有个关键信息是 $d |left(a_{i}+1 ight)$ 和 $N leq 100 d$ ,所以我们可以先对每个藏钥匙的地方分配 $d$ 倍的钥匙数量,然后每个位置最终只能再放 $[0,d)$ 把钥匙。然后我们考虑如果我们知道了每个位置第一步分配的情况,那后面再分配的话我们需要知道被发现的位置一开始分配了多少,这样才能够去保证这些被发现的位置钥匙之和至少为 $n$ 。

    所以我们考虑 $ ext{dp}$ : $f[x][i][j][k]$ 表示前 $x$ 个地方,有 $k$ 个位置最后会被发现,这 $k$ 个位置总共分配了 $j imes d$ 把钥匙,这 $x$ 个位置总共分配了 $i imes d$ 把钥匙。转移显然。

    然后假设第一步分配后还有 $x$ 把钥匙没有被分配,被发现的 $k$ 个位置中还差 $y$ 把钥匙达到 $n$ 。我们可以把这 $k$ 个位置放在前面,考虑先分配 $y$ 把钥匙在这 $k$ 个位置上。由于 $M$ 很小,且钥匙无序,所以可以枚举 $u$ 表示第 $y$ 把钥匙放在 $u$ 上,且 $y-1$ 把钥匙放在了 $u$ 及之前, $x-y$ 把钥匙放在 $u$ 及之后的位置,如果我们不考虑分配不小于 $d$ ,那就可以隔板法。不小于 $d$ 的话考虑容斥,可以考虑在原本 $ ext{dp}$ 的时候就进行容斥,即转移的时候考虑这个位置之后分配会不小于 $d$ 的话,那就强制这个位置多选一个 $d$ 容斥转移即可。这样后面再分配直接隔板就可以了。

    效率: $O(m^2 imes (frac{N}{d})^2)$ 。

  • 相关阅读:
    五步搞定Android开发环境部署!
    WebBrowser JS回调delphi的方法 (简单通用)
    Delphi根据方法名调用方法
    Delphi TstringList Stringlist的特殊用法
    delphi 获取webbrowser的cookies给Idhttp用
    HttpHelper类登录淘宝联盟并下载淘宝客订单xls
    我的常用笔记(GetAndroid,ADBDemo,GetSJ,GetTB)
    P1025 数的划分
    P1969 积木大赛
    P2038 无线网络发射器选址
  • 原文地址:https://www.cnblogs.com/xjqxjq/p/13040718.html
Copyright © 2020-2023  润新知