「專題訓練」Collecting Bugs(POJ-2096)
阿新 • • 發佈:2019-04-19
可能 while 矩陣 代碼 esp 討論 分析 eof ()
題意與分析
題意大致是這樣的:給定一個\(n\times s\)的矩陣,每次可以隨機的在這個矩陣內給一個格子染色(染過色的仍然可能被選中),問每一行和每一列都有格子被染色的次數的期望。
這題如果從概率(從正方向推)就會白給,不信你自己試試;而定義反方向的推導(\(e_{i,j}\)意為從i行j列已有染色格子到最後全被染色的次數的期望)就會非常簡單:分四種情況討論即可。
代碼
#include <bits/stdc++.h> using namespace std; double e[1005][1005]; int n, s; const double eps = 1e-6; int main() { while (cin >> n >> s) { memset(e, 0, sizeof(e)); for (int x = n; x >= 0; --x) { for (int y = s; y >= 0; --y) { double p1 = x * y, p2 = (n - x) * y, p3 = x * (s - y), p4 = (n - x) * (s - y); if (x == n && y == s) e[x][y] = 0; else { e[x][y] = (p2 * e[x + 1][y] + p3 * e[x][y + 1] + p4 * e[x + 1][y + 1] + n * s) / (n * s - p1); } } } cout << fixed << setprecision(4) << e[0][0] << endl; } return 0; }
「專題訓練」Collecting Bugs(POJ-2096)