求这样做行不行
查看原帖
求这样做行不行
731925
happy_zero楼主2023/4/28 12:29

想到了一个办法,也 AC 了,但感觉是错的,不知道为什么:

  • 令 fi,jf_{i,j} 表示剩下 ii 张 AA 和 jj 张 BB 类票是最后剩下的两张票是 A,BA,B 的概率,显然 f1,1=0f_{1,1}=0,答案为 1−fn,n1-f_{n,n}
  • 状态转移:发现如果从 fi−1,jf_{i-1,j} 转移而来,无论怎么安排,剩下的都一定是 A,BA,B;如果是从 fi,j−1f_{i,j-1} 转移而来,一共有 i+j+1i+j+1 种安排,其中最后两种不可行,所以应该只有 (i+j−1)÷(i+j+1)(i+j-1)\div(i+j+1) 的概率可行:fi,j=fi−1,j×0.5+fi,j−1×0.5×(i+j−1)÷(i+j+1)f_{i,j}=f_{i-1,j}\times0.5+f_{i,j-1}\times0.5\times(i+j-1)\div(i+j+1)

代码:

#include <bits/stdc++.h>
using namespace std;
const int N = 3005;
double f[N][N];
int main()
{
    int n;
    cin >> n;
    n = n / 2;
    f[1][1] = 1;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++)
        {
            if (i == 1 && j == 1) continue;
            f[i][j] = f[i - 1][j] * 0.5 + f[i][j - 1] * 0.5 * (i + j - 1) / (i + j - 1);
        }
    printf("%.4f", 1 - f[n][n]);
    return 0;
}
2023/4/28 12:29
加载中...