題意:
兩列隊伍,左邊有
兩邊收銀員各有一個經驗值參數
題解:
首先發現
設左邊沒人但右邊有人爲事件
然後就是DP,
然後轉移有四個方向:
- 左邊成功但右邊失敗,概率是
a∗(1−b) - 左邊成功且右邊成功,概率是
a∗b - 左邊失敗但右邊成功,概率是
(1−a)∗b - 左邊失敗且右邊失敗,概率是
(1−a)(1−b)
整理出轉移方程。
解出
初始條件爲
// BEGIN CUT HERE
// END CUT HERE
#line 5 "Queueing.cpp"
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
double dp[1005][1005];
class Queueing {
private:
void init(){
memset(dp, 0, sizeof(dp));
}
public:
double probFirst(int len1, int len2, int p1, int p2) {
init();
for(int i = 1; i <= len2; ++i) dp[0][i] = 1;
double a = 1.0/p1, b = 1.0/p2;
for(int i = 1; i <= len1; ++i){
for(int j = 1; j <= len2; ++j){
dp[i][j] = dp[i-1][j]*a*(1-b)+dp[i][j-1]*(1-a)*b+dp[i-1][j-1]*a*b;
dp[i][j] /= (1-(1-a)*(1-b));
}
}
return dp[len1][len2];
}
};