Topcoder SRM 488 Div1 250(概率dp)

题意:有n个有聊人和m个无聊人,每次等概率任选两个人,让他们都变成无聊人,求所有人都变成无聊人的期望次数。( 1n,m47 )。

解法:设f(i)表示存在 i 个有聊人,将所有人都变成无聊人的期望次数。显然f(0) = 0,即不需要改变。方程: f(i)=f(i2)×C2iC2n+m+f(i1)×i×(n+mi)C2n+m+f(i)×C2n+miC2n+m+1 .
答案即为f(m)

代码

#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
class TheBoredomDivOne{
public:
    double f[100];
    double c(double x){
        return x * (x - 1) / 2;
    }
    double find(int n, int m){
        memset(f, 0, sizeof(f));
        f[0] = 0;
        for(int i = 1; i <= m; i++)
        {
            f[i] = (f[i-2] * c(i) + f[i-1] * i * (n + m - i) + c(n + m)) / (c(n + m) - c(n + m - i));
        }
        return f[m];
    }
};

你可能感兴趣的:(概率DP)