首先,在最优策略的条件下,在没有多余信息的情况时,先手不会主动去猜测,只会不断地尝试询问。
接下来我们尝试列出以下表格。其中,上方是先手,左侧是后手。先手询问一张自己手中没有的牌,称之为问;询问一张自己手中有的牌,称之为诈:
先后手 | 问(自己没有的牌) | 诈(自己有的牌) |
---|---|---|
相信先手 | A\texttt{A}A | B\texttt{B}B |
不相信先手 | C\texttt{C}C | D\texttt{D}D |
设 fn,mf_{n,m}fn,m 表示先手有 nnn 张,后手有 mmm 张牌时,先手获胜的概率。对四种情况进行详细地分析:
Case A\texttt{Case A}Case A
-
有 1m+1\frac{1}{m + 1}m+11 的概率问到桌上的那张牌。由于后手选择相信,后手也就知晓了桌上的牌,因此下一次可以直接猜测这张牌而获胜。
-
有 mm+1\frac{m}{m + 1}m+1m 的概率问到后手手中的牌。后手失去一张牌且无多余信息获得。
因此该种情况的收益为 1m+1×0+mm+1(1−fm−1,n)\frac{1}{m + 1} \times 0 + \frac{m}{m + 1}(1-f_{m - 1,n})m+11×0+m+1m(1−fm−1,n)。
Case B\texttt{Case B}Case B
后手认为这张牌是桌上的牌,因此后手无法获胜,收益为 111。
Case C\texttt{Case C}Case C
-
有 1m+1\frac{1}{m + 1}m+11 的概率问到桌上的那张牌。由于后手选择不相信,相当于后手认为这张牌是先手的,因此先手胜。
-
有 mm+1\frac{m}{m + 1}m+1m 的概率问到后手手中的牌。后手失去一张牌且无多余信息获得。
因此该种情况的收益为 1m+1×1+mm+1(1−fm−1,n)=1−mm+1fm−1,n\frac{1}{m + 1} \times 1 + \frac{m}{m + 1}(1-f_{m - 1,n}) = 1 - \frac{m}{m + 1}f_{m - 1,n}m+11×1+m+1m(1−fm−1,n)=1−m+1mfm−1,n。
Case D\texttt{Case D}Case D
相当于后手知晓了先手的一张牌,先手无多余信息获得,收益为 1−fm,n−11 - f_{m,n - 1}1−fm,n−1。
四种情况均已知晓后我们就需要找到纳什均衡,换句话说,就是找到一个概率 ppp 使得每个人的选择都让对方无法猜透,更进一步来说,就是期望价值相等(如果画图,可以得到两条线存在非坐标轴处的交点)。因此可列出方程:
pA+(1−p)B=pC+(1−p)Dp(A−B−C+D)=D−Bp=B−DB+C−A−D pA + (1 - p)B = pC + (1 - p)D \\ p(A - B - C + D) = D - B \\ p = \dfrac{B - D}{B + C - A - D} pA+(1−p)B=pC+(1−p)Dp(A−B−C+D)=D−Bp=B+C−A−DB−D
代码用记忆化即可,注意边界情况:
long double dfs (int x,int y)
{
if (dp[x][y]) return dp[x][y];
if (!x) return dp[x][y] = 1.0 / (y + 1);
if (!y) return dp[x][y] = 1.0;
long double A = 1.0 * y / (y + 1) * (1 - dfs (y - 1,x)),B = 1.0,C = 1.0 - 1.0 * y / (y + 1) * dfs (y - 1,x),D = 1 - dfs (y,x - 1);
long double p = (B - D) / (B + C - A - D);
return dp[x][y] = p * A + (1 - p) * B;
}