题意:
我们有一个装有A金币,B银币和C青铜币的袋子。
在袋子中装有100个相同颜色的硬币之前,我们将重复以下操作:操作:从袋子中随机取出一个硬币(每个硬币被选择的可能性相同)。然后,将两个硬币放回袋子中 与取出的硬币相同。
查找操作完成次数的期望值。
题解:
我们设dp[i][j][k]表示金币为i时,银币为j时,铜币为k时的概率。初始时dp[a][b][c]概率为1。根据题意,我们每一次取出一个金币的概率为i/(i+j+k),转移方程为dp[i+1][j][k] += dp[i][j][k] * i /(i+j+k)。金币的期望E则为i从(b~99),j从(c,99) 得到(100+i+j-a-b-c)*dp[100][i][j]。银币和铜币的做法类似,具体看一下代码,时间复杂度为n^3
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 105;
double dp[N][N][N];
int main() {
int a,b,c;
cin>>a>>b>>c;
dp[a][b][c] = 1.0;
for(int