CF148D Bag of mice ###K
题目链接:https://codeforces.ml/problemset/problem/148/D
思路:概率dp 概率顺推 期望逆推 dp[i][j] 表示有i只白鼠 j只黑鼠 A的获胜概率
每次的状态是 A直接拿到白鼠 A拿到黑鼠 B拿到黑鼠 跑了一只黑鼠 A拿到黑鼠 B拿到黑鼠 跑了一只白鼠三种状态
和期望dp类似 也是通过转移上一次的状态 乘上概率得到答案
因为受a b同时影响,所以每次的操作将A,B都操作完看作是一次操作来转移
A拿到白鼠是直接获胜所以没有dp[i-1][j] 转移过来,而是直接结束状态, 其他有转移过来是因为其他的是可能获胜
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int maxn=1e3+10; 4 #define ll long long 5 #define pb push_back 6 double dp[maxn][maxn]; 7 8 9 int main() 10 { 11 ios::sync_with_stdio(0); 12 cin.tie(0); 13 int w,b; 14 cin>>w>>b; 15 for(int i=1;i<=w;i++) 16 dp[i][0]=1.0; 17 for(int i=1;i<=w;i++) 18 { 19 for(int j=1;j<=b;j++) 20 { 21 dp[i][j]=1.0*i/(i+j); 22 if(j>=2) 23 dp[i][j]+=1.0*j/(i+j)*(j-1)/(i+j-1)*i/(i+j-2)*dp[i-1][j-2]; 24 if(j>=3) 25 dp[i][j]+=1.0*j/(i+j)*(j-1)/(i+j-1)*(j-2)/(i+j-2)*dp[i][j-3]; 26 } 27 } 28 cout<<fixed<<setprecision(9)<<dp[w][b]<<'\n'; 29 30 31 }
// 为什么不是由来的状态计算概率
                    
                
                
            
        
浙公网安备 33010602011771号