分析:

虽然很简单的一道题,但感觉自己理解起来还是有难度。
首先,确定状态为 \(dp[i][j]\) 表示有 \(i\)\(A\)\(j\)\(B\) 时,最后两人票相同的概率。那么,显然 \(dp[i][0]=dp[0][i]=1\ (i\geq 2)\)。又有 \(dp[i][j]=0.5*(dp[i-1][j]+dp[i][j-1])\),怎么理解这个呢?第一个拿票的人,有两种选择:\(A\) 或者 \(B\),概率各为:\(\frac{1}{2}\)。剩下的就转化为 \(i-1\)\(A\),\(j\)\(B\)\(i-1\)\(A\),\(j\)\(B\)的情况。

代码:

#include<bits/stdc++.h>

using namespace std;
const int N=1300;
double dp[N][N];
int main()
{
    int n;
    scanf("%d",&n);
    n/=2;
    for(int i=2;i<=n;i++)
        dp[i][0]=dp[0][i]=1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=n;j++)
            dp[i][j]=(dp[i-1][j]+dp[i][j-1])*0.5;
    }
    printf("%.4f\n",dp[n][n]);
    return 0;
}

版权声明:本文为1024-xzx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/1024-xzx/p/13269134.html