Pagini recente » Cod sursa (job #145896) | Cod sursa (job #3262885) | Cod sursa (job #85980) | Cod sursa (job #1593104) | Cod sursa (job #1209788)
#include <stdio.h>
#define SET 1
#define NOT_SET 0
int C[32], N, K;
double P[32], prob_sum;
void generate(double p, int k)
{
if (k > K)
{
// Aduna probabilitatea curenta
prob_sum += p;
}
else
{
for (int i = 1; i <= N; ++i)
{
if (C[i] == NOT_SET)
{
C[i] = SET;
generate(P[i] * p, k+1);
C[i] = NOT_SET;
}
}
}
}
int fact(int n)
{
int f = 1;
for (int i = 2; i <= n; ++i)
{
f *= i;
}
return f;
}
int main()
{
freopen("dezastru.in", "r", stdin);
freopen("dezastru.out", "w", stdout);
scanf("%d %d", &N, &K);
for (int i = 1; i <= N; ++i)
{
scanf("%lf", P + i);
}
generate(1.0, 1);
double p = prob_sum / fact(N);
printf("%.6lf", p);
return 0;
}