點擊打開鏈接
概率dp
代碼:
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int maxn = 1e3+10;double dp[maxn][maxn];double dfs(int w,int b){ if(dp[w][b] >= 0) return dp[w][b]; if(w == 0) return 0; if(b==0 && w!=0) return 1; dp[w][b] = w*1.0/(w+b); if(b >= 2){ double tb = b*1.0/(w+b) * (b-1)*1.0/(w+b-1); //要想在下一次取勝則本次學(xué)妹應(yīng)該拿走一個黑鼠 邱也必須拿走一個黑鼠 醬神可以任意拿走一個白鼠或一個黑鼠 if(b >= 3) dp[w][b] += tb * dfs(w,b-3) * (b-2)*1.0/(w+b-2);//醬神拿走黒鼠 學(xué)妹和邱老師各拿走一只黑鼠 if(w >= 1) dp[w][b] += tb * dfs(w-1,b-2) * w*1.0/(w+b-2); //醬神拿走白鼠 } return dp[w][b];}int main(){ memset(dp,-1,sizeof(dp)); int w,b; cin >> w >> b; PRintf("%.9f/n",dfs(w,b));}
新聞熱點
疑難解答