\(f(S, x)\) 表示最开始 \(x\) 为擂主,参赛者集合为 \(S\) 时,最后 \(1\) 胜利的概率。
那么显然答案就是 \(\max_{x}\{f(U, x)\}\),\(U\) 表示全集。
起始状态是 \(f(1, 1) = 100\%\),表示只有 \(1\) 一个人参赛,且他自己为擂主时,\(1\) 获胜的概率为 \(100\%\)。
注意:整个 DP 是倒序 DP,\(f\) 表示的是某个初始状态下能得到所需最终结果的概率;所以转移的时候应该以后续状态计算前驱状态。
在转移时,枚举 \(x\) 的对手 \(y\),\(x\) 和 \(y\) 都要在参赛者里。
考虑参赛者集合为 \(S\),擂主 \(x\) 打 \(y\) 的所有结果:
- \(x\) 赢了,概率为 \(a_{x, y}\),后续 \(1\) 有 \(f(S - \{y\}, x)\) 的概率胜利
- \(y\) 赢了,概率为 \(a_{y, x}\),后续 \(1\) 有 \(f(S - \{x\}, y)\) 的概率胜利
两种情况加起来,再对每一个 \(y\) 取最小值即可。
顺便说一句,这题一定用的是集合的十进制表示小的推大的,所以可以直接顺序枚举。