#P13170. [GCJ 2017 #1C] Core Training

    ID: 12992 远端评测题 5000~10000ms 1024MiB 尝试: 0 已通过: 0 难度: 9 上传者: 标签>动态规划 DP2017Special Judge概率论Google Code Jam

[GCJ 2017 #1C] Core Training

Description

编写 Code Jam 题目很难,因此我们开发了一个 AI 来提出新点子。为了让 AI 尽可能有创造力,我们为它配备了 NN 个不同的“核心”,每个核心都有自己的“个性”。然而,就像人一样,这些核心可能会分心、损坏或拒绝工作;第 ii 个核心正常工作的概率为 PiP_i。只要至少有 KK 个核心正常工作,AI 就能正常运行。否则,它很可能会变得邪恶,把我们困在自己设计的恶魔谜题迷宫里。谁知道它会对 Code Jam 做些什么——也许会写出一堆难到爆炸的概率题!

为了防止这种情况发生,我们计划训练一个或多个核心,使其更可靠。我们总共有 UU 个“训练单元”可以用来提升核心的可靠性。将 XX 个训练单元分配给第 ii 个核心,会使其成功概率增加 XX。我们可以随意分配这些训练单元,也可以让一个或多个核心不分配任何训练单元。当然,核心的成功概率不能超过 11

如果我们以最大化 AI 正常运行概率的方式分配训练单元,这个概率是多少?

Input Format

输入的第一行包含测试用例数 TT。接下来有 TT 组测试数据,每组包含三行。第一行包含两个整数 NNKK,分别表示核心总数和 AI 正常运行所需的最少正常核心数。第二行包含一个有理数 UU,表示训练单元的数量。第三行包含 NN 个有理数 PiP_i,第 ii 个数表示第 ii 个核心正常工作的概率。所有概率均精确到小数点后四位。

Output Format

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 1 开始),yy 是在最优分配训练单元后 AI 正常运行的概率。如果 yy 与正确答案的绝对误差或相对误差不超过 10610^{-6},则视为正确。

4
4 4
1.4000
0.5000 0.7000 0.8000 0.6000
2 2
1.0000
0.0000 0.0000
2 1
0.0000
0.9000 0.8000
2 1
0.1000
0.4000 0.5000
Case #1: 1.000000
Case #2: 0.250000
Case #3: 0.980000
Case #4: 0.760000

Hint

样例解释

注意,最后两个样例不会出现在小数据集 1 中。

在样例 1 中,我们有足够的训练单元,可以让所有核心的成功概率都变为 1,因此 AI 一定能正常运行。

在样例 2 中,两个核心都必须正常工作,AI 才能正常运行,因此必须给每个核心分配一些训练单元。最优方案是将每个核心都训练到 0.50.5。此时 AI 正常运行的概率为 0.5×0.5=0.250.5 \times 0.5 = 0.25。其他分配方式都不如这个好;比如把一个核心训练到 0.90.9,另一个训练到 0.10.1,成功概率只有 0.9×0.1=0.090.9 \times 0.1 = 0.09

在样例 3 中,我们没有训练单元可用,且至少需要一个核心正常工作。可以先计算 AI 无法正常工作的概率,即所有核心都失效。两个核心都失效的概率为 (10.9)×(10.8)=0.02(1 - 0.9) \times (1 - 0.8) = 0.02。因此至少有一个核心正常工作的概率,即 AI 正常运行的概率为 10.02=0.981 - 0.02 = 0.98

在样例 4 中,最优策略是将所有训练单元都分配给第二个核心。这样至少有一个核心正常工作的概率为 1(0.4×0.6)=0.761 - (0.4 \times 0.6) = 0.76。其他分配方式都不如这个好;比如全部分配给第一个核心只得到 0.750.75,平均分配给两个核心得到 0.75250.7525

数据范围

  • 1T1001 \leq T \leq 100
  • 1N501 \leq N \leq 50
  • 对所有 ii0.0000Pi1.00000.0000 \leq P_i \leq 1.0000
  • 0.0000UNPi0.0000 \leq U \leq N - \sum P_i。(不会有多于可用的训练单元。)

小数据集 1(15 分,测试集 1 - 可见)

  • 时间限制:5 秒。
  • K=NK = N。(所有核心都必须正常工作,AI 才能正常运行。)

小数据集 2(28 分,测试集 2 - 可见)

  • 时间限制:10 秒。
  • 1KN1 \leq K \leq N

由 ChatGPT 4.1 翻译