n 個獨立事件,第 i 事件發生概率 pᵢ,收益 aᵢ(可負)。初始收益 k。求 n 事件後:發生事件數 ≥ l 且 總收益 ≥ 0 的概率。
f[i][j][k]:前 i 個事件,已發生 j 個,當前收益為 k 的概率。
k > n 統一映射到 n,k < -n 映射到 -nf[i+1][j+1][k + a[i+1]] += f[i][j][k] * p[i+1] // 事件發生 f[i+1][j][k] += f[i][j][k] * (1-p[i+1]) // 事件不發生
struct Arr {
double v[405]; // 映射 [-n, n] -> [0, 2n]
double& operator[](int x) {
if (x > n) x = n;
if (x < -n) x = -n;
return v[x + 200];
}
} f[205][205];
ans = Σ f[n][j][k] (j ≥ l, k ≥ 0)