1 条题解

  • 0
    @ 2026-9-3 11:21:12

    题解

    思路

    状态与边界

    记 fi,jf_{i,j} 为轮到当前玩家行动、当前玩家有 ii 张牌、对手有 jj 张牌时,当前玩家在最优策略下的胜率。牌的名字具有对称性,因此状态只与两人的牌数有关。

    若 i=0i=0,当前玩家只可能在对手的 jj 张牌和桌牌中猜测,故 f0,j=1/(j+1)f_{0,j}=1/(j+1)。若 j=0j=0,当前玩家知道唯一未知牌就是桌牌,故 fi,0=1f_{i,0}=1。

    做法

    一个状态中的矩阵博弈

    当前玩家询问时,只需考虑两类不可区分的动作:询问自己手中的牌来欺骗对手,或询问自己不知道的牌。对手在听到一次否定回答后,也只需决定相信或不相信。令

    A=jj+1(1−fj−1,i),B=1,A=\frac{j}{j+1}(1-f_{j-1,i}),\quad B=1, C=1j+1+A,D=1−fj,i−1.C=\frac1{j+1}+A,\quad D=1-f_{j,i-1}.

    四个量依次构成双方两个纯策略下当前玩家的收益矩阵。若当前玩家以概率 pp 选择第一行,混合策略均衡要求对手两列的期望收益相同:

    pA+(1−p)B=pC+(1−p)D.pA+(1-p)B=pC+(1-p)D.

    所以

    p=D−BA−B−C+D,fi,j=pA+(1−p)B.p=\frac{D-B}{A-B-C+D},\qquad f_{i,j}=pA+(1-p)B.

    两项依赖的下标和都为 i+j−1i+j-1,因此可以按 i+ji+j 递增计算。

    复杂度

    三个算法层级

    子任务 1 直接按上述博弈递归展开,不记忆任何状态,时间复杂度为 O(2m+n)O(2^{m+n}),空间复杂度为 O(m+n)O(m+n)。

    子任务 2 记忆每个 (i,j)(i,j),每个状态只计算一次,时间与空间复杂度均为 O((m+n)2)O((m+n)^2)。

    满分算法按对角线滚动。计算和为 ss 的状态时只保留和为 s−1s-1 的整条对角线;对 (i,j)(i,j),所需两项分别是上一层下标 j−1j-1 与 jj。时间复杂度为 O((m+n)2)O((m+n)^2),空间复杂度降为 O(m+n)O(m+n)。

    正确性证明

    边界由玩家可辨认的未知牌集合直接得到。对内部状态,牌名的对称性把所有有效行动归并成收益相同的两类,任何同类动作都不会提供额外信息。零和二乘二矩阵博弈的混合策略均衡使对手对两列无差异,上式给出的 pp 及收益因此就是该状态的最优胜率。转移只依赖总牌数更少的状态,按总牌数归纳即可证明所有 fi,jf_{i,j} 均正确。最终输出 fm,nf_{m,n} 与 1−fm,n1-f_{m,n}。

    • 1

    信息

    ID
    1509
    时间
    2000ms
    内存
    64MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者