Cod sursa(job #866973)

Utilizator stoicatheoFlirk Navok stoicatheo Data 28 ianuarie 2013 22:18:12
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
 
using namespace std;
 
#define maxN 30
 
double DP[maxN][maxN], P[maxN];
 
 
int main()
{
    freopen ("dezastru.in", "r", stdin);
    freopen ("dezastru.out", "w", stdout);
     
    int N, K;
    scanf ("%d %d", &N, &K);
     
    for (int i = 1; i <= N; ++ i) scanf ("%lf", &P[i]);
     
    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 <= i; ++ j) DP[i][j] = DP[i - 1][j] + DP[i - 1][j - 1] * P[i];
     
    for (int i = 1; i <= N - K; ++ i) DP[N][K] *= i;
    for (int i = K + 1; i <= N; ++ i) DP[N][K] /= i;
     
    printf ("%.7lf", DP[N][K]);
     
    return 0;
}