Cod sursa(job #1553443)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 19 decembrie 2015 20:58:33
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <iostream>
#include <array>
#include <fstream>
#include <vector>
#include <queue>
#include <utility>
#include <algorithm>
#include <functional>
#include <string>
#include <cstring>
#include <cmath>
#include <map>
#include <set>
#include <bitset>
#include <stack>
#define MOD 1000000007
#define NMAX 30
#define MMAX 100005
#define INF 100000000
#define mp make_pair

using namespace std;

FILE *fin = freopen("dezastru.in", "r", stdin);
FILE *fout = freopen("dezastru.out", "w", stdout);

typedef pair<int, int> pii;

double v[NMAX], DP[NMAX][NMAX], comb[NMAX][NMAX];

int main() {
	int n, k, i, j;

	scanf("%d%d", &n, &k);

	for (i = 1; i <= n; ++i) {
		scanf("%lf", &v[i]);
		DP[i][0] = 1;
		comb[i][1] = i;
	}

	DP[0][0] = 1;
	for (i = 1; i <= k; ++i)
		for (j = i; j <= n; ++j)
			DP[j][i] = DP[j - 1][i] + v[j] * DP[j - 1][i - 1];

	for (i = 2; i <= n; ++i)
		for (j = 2; j <= i; ++j)
			comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];

	printf("%.6f", DP[n][k] / comb[n][k]);

	return 0;
}