CF98E Help Shrek and Donkey

Link

神仙题/纳什均衡入门题。

f(n,m) 表示先手有 n 张牌,后手有 m 张牌时先手获胜概率。

分析先手的策略:

  1. 直接猜
  2. 询问(指定自身没有的牌)
  3. 诈骗(指定自身已有的牌)

n=0 或者 m=0 时先手肯定会直接猜(m=0 必中,n=0 不猜必输)。
那在n,m1 时会不会猜一把增加胜率呢?事实上不会,下面是证明。

直接猜的胜率为 1m+1

考虑如下决策:使用一次“询问”后立即猜。
“询问”有 1m+1 的概率得到“没有”的回答,有 mm+1 的概率弃置一张牌。
对手唯一会对该策略从产生影响的决策是下一轮直接猜,设概率为 p

则最终胜率为

minp[0,1]{(1p)(1m+1+mm+11m)+pnn+1}

显然为一次函数,极值在端点取到,即胜率为

min{nn+1,2m+1}

显然在 n,m1 时不劣于直接猜。

结论:在某一方已经确定牌之前不会有猜测操作。

考虑先手的“询问”和“诈骗”,以及后手的“信任”和“不信任”。

询问 诈骗
信任 mm+1(1f(m1,n)) 1
不信任 1m+1+mm+1(1f(m1,n)) 1f(m,n1)

这里先手和后手可能会选择随机策略,设询问/相信的概率分别为 p,q

则终态为 max[ming(p,q)],由于 p 确定后是一次曲线,所以 q{0,1}
终态为 maxmin[g(p,0),g(p,1)],由于这两条直线斜率正负相反,所以最大值在交点取到。

这也可以由“纳什均衡时每个人的混合策略使得其余参与人的任何纯策略的期望收益相等”这一结论导出。

#include <cstdio>
#include <algorithm>
#include <cctype>
using namespace std;

char buf[1<<14], *p1=buf, *p2=buf;
#define GetC() ((p1==p2)&&(p2=(p1=buf)+fread(buf,1,1<<14,stdin),p1==p2)?EOF:*p1++)

struct Ios{}io;
template <typename _tp>
Ios &operator >>(Ios &in, _tp &x){
    x=0; int w=0; char c=GetC();
    for(;!isdigit(c);w|=c=='-', c=GetC());
    for(;isdigit(c);x=x*10+(c^'0'), c=GetC());
    if(w) x=-x;
    return in;
}

const int N=1e3+5;
double f[N][N];

int main(){
    int n, m; io>>n>>m;
    for(int i=0;i<=max(n, m);++i) f[i][0]=1, f[0][i]=1.0/(i+1);
    for(int l=2;l<=2*max(n, m);++l){
        for(int i=1;i<l&&i<=max(n, m);++i){
            int j=l-i;
            if(j>max(n, m)) continue ;
            double w11=1.0*j/(j+1)*(1-f[j-1][i]), w12=1.0/(j+1)+1.0*j/(j+1)*(1-f[j-1][i]),
            w21=1, w22=1-f[j][i-1];

            //p*w11+(1-p)*w21=p*w12+(1-p)*w22
            double p=(w22-w21)/(w11-w21+w22-w12);
            f[i][j]=p*w11+(1-p)*w21;
        }
    }
    printf("%.9lf %.9lf\n",f[n][m], 1-f[n][m]);
    return 0;
}
posted @   pref_ctrl27  阅读(36)  评论(2编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示