Cod sursa(job #2174077)

Utilizator B_RazvanBaboiu Razvan B_Razvan Data 16 martie 2018 10:39:48
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include <iostream>
#include <cstdio>
#define NMAX 30

using namespace std;

int N, K, pas[NMAX];
double prob[NMAX], dp[NMAX][NMAX];

void read() {
    scanf("%d %d", &N, &K);
    for(int i = 1; i <= N; ++i) {
        scanf("%lf", &prob[i]);
    }
}

int createPas() {
    pas[0] = 1;
    for(int i = 1; i <= N; ++i) {
        for(int j = i; j >= 1; --j) {
            pas[j] += pas[j - 1];
        }
    }
    return pas[K];
}

void solve() {
    for(int j = 0; j <= K; ++j) {
        dp[0][j] = 0;
    }
    for(int i = 0; i <= N; ++i) {
        dp[i][0] = 1;
    }
    for(int i = 1; i <= N; ++i) {
        for(int j = 1; j <= K; ++j) {
            dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] * prob[i];
        }
    }
}

int main()
{
    freopen("dezastru.in", "r", stdin);
    freopen("dezastru.out", "w", stdout);
    read();
    solve();
    printf("%lf", dp[N][K] / createPas());
    return 0;
}