0w1

CFR 518 D. Ilya and Escalator ( Expectation DP )

Problem - D - Codeforces
題意:
N 個人排成一排,每秒隊首有 P 的機率進電梯,1 - P 的機率停留原地。求 T 秒後,期望有多少人在電梯裡。
解法:
dp[ i ][ j ] : 已經過 i 秒,電梯裡有 j 個人的機率。
dp[ i ][ j ] = dp[ i - 1 ][ j - 1 ] * P + dp[ i - 1 ][ j ] * ( 1 - P )

int N, T;
double P;

void init(){
    cin >> N >> P >> T;
}

vvd dp;

void preprocess(){
    dp = vvd( T + 1, vd( N + 1 ) );
    dp[ 0 ][ 0 ] = 1.0;
    for( int i = 0; i < T; ++i )
        for( int j = 0; j <= N; ++j ){
            if( j == N )
                dp[ i + 1 ][ j ] += dp[ i ][ j ];
            else
                dp[ i + 1 ][ j ] += dp[ i ][ j ] * ( 1.0 - P ),
                dp[ i + 1 ][ j + 1 ] += dp[ i ][ j ] * P;
        }
}

void solve(){
    double ans = 0.0;
    for( int i = 1; i <= N; ++i )
        ans += dp[ T ][ i ] * i;
    cout << fixed << setprecision( 9 ) << ans << endl;
}