Pagini recente » Cod sursa (job #1836093) | Borderou de evaluare (job #1808232) | Borderou de evaluare (job #2428907) | Borderou de evaluare (job #622716) | Cod sursa (job #2495905)
#include <bits/stdc++.h>
std::ifstream input ("dezastru.in");
std::ofstream output("dezastru.out");
#define MAXN 30
#define num double
#define llg long long
int N, K;
num DP[MAXN][MAXN], fact[MAXN];
std::vector <num> V;
int main()
{
input >> N >> K;
V.resize(N);
for (auto &it:V) input >> it;
fact[0] = 1;
for (int i=1; i<=N; ++i) fact[i] = fact[i-1]*i;
DP[0][0] = 1;
for (int i=1; i<=N; ++i) {
DP[i][0] = 1;
for (int j=1; j<=i; ++j)
DP[i][j] = (DP[i-1][j] + DP[i-1][j-1]*V[i-1]);
} output << std::fixed << std::setprecision(12) << DP[N][K]*fact[K]*fact[N-K]/fact[N];
return 0;
}