CF2115C Gellyfish and Eternal Violet
题目描述
在 Gellyfish 面前有 $n$ 只怪物,编号从 $1$ 到 $n$,第 $i$ 只怪物的生命值为 $h_i$。
Gellyfish 并不想杀死它们,但她想让这些怪物对自己不再构成威胁。因此,她希望把所有怪物的生命值都恰好降到 $1$。
现在,Gellyfish 拿着“泪水磨砺之剑”,准备攻击怪物 $m$ 回合。每一回合:
1. “泪水磨砺之剑”有概率 $p$ 闪耀。
2. Gellyfish 可以选择是否攻击:
- 如果 Gellyfish 不攻击,则什么都不会发生。
- 如果 Gellyfish 选择攻击且“泪水磨砺之剑”闪耀,则所有怪物的生命值都会减少 $1$。
- 如果 Gellyfish 选择攻击且“泪水磨砺之剑”没有闪耀,则 Gellyfish 可以选择其中一只怪物,使其生命值减少 $1$。
请注意,在 Gellyfish 决定是否攻击之前,她会知道剑是否闪耀。此外,当剑闪耀时,Gellyfish 只能对所有怪物进行攻击,不能只攻击其中一只怪物。
现在,Gellyfish 想知道,如果她在战斗中每一步都做出最优选择,最终达成目标的概率是多少。
输入格式
每组测试数据包含多个测试用例。第一行包含一个整数 $t$($1 \le t \le 100$),表示测试用例的数量。
每个测试用例的第一行包含三个整数 $n$、$m$ 和 $p'$($1 \leq n \leq 20$,$1 \leq m \leq 4000$,$0 \leq p' \leq 100$),分别表示怪物的数量、攻击的回合数,以及“泪水磨砺之剑”闪耀的概率 $p = \frac{p'}{100}$。
每个测试用例的第二行包含 $n$ 个整数 $h_1,h_2,\ldots,h_n$($1 \leq h_i \leq 400$),表示每只怪物的生命值。
保证所有测试用例中 $n$ 的总和不超过 $100$。
输出格式
对于每个测试用例,输出一个实数,表示 Gellyfish 达成目标的概率。
如果你的答案的绝对误差或相对误差不超过 $10^{-6}$,则视为正确。
形式化地说,设你的答案为 $a$,标准答案为 $b$,当且仅当 $\frac{|a - b|}{\max{(1, |b|)}} \le 10^{-6}$ 时,判为正确。
说明/提示
在第一个测试用例中,Gellyfish 在第一回合无论剑是否闪耀都会选择攻击。
如果第一回合剑闪耀,则 Gellyfish 在第一回合攻击后就能达成目标。
否则,如果第一回合剑没有闪耀,她会在第一回合攻击第 $1$ 只怪物。对于第二回合:
- 如果剑闪耀,由于第 $1$ 只怪物在第一回合被攻击过,Gellyfish 无法达成目标。
- 否则,她可以攻击第 $2$ 只怪物,从而达成目标。
因此,Gellyfish 达成目标的概率为 $10\% + (90\% \cdot 90\%) = 91\%$。
在第二个测试用例中,Gellyfish 只会在第一次剑闪耀时选择攻击。可以发现,唯一无法达成目标的情况是 $5$ 回合中剑从未闪耀。Gellyfish 达成目标的概率为 $100\% - (80\%)^5 = 67.232\%$。
由 ChatGPT 4.1 翻译