Cod sursa(job #1396923)

Utilizator mircea.dobreanuMircea Dobreanu mircea.dobreanu Data 23 martie 2015 09:43:09
Problema Dezastru Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include <fstream>
#include <iostream>
#include <iomanip>
using namespace std;

ifstream fin("dezastru.in");
ofstream fout("dezastru.out");
const int kMax = 30;
int n, k, comb[kMax][kMax];
double p[kMax], dp[kMax][kMax];

int main()
{
	fin >> n >> k;
	for (int i = 1; i <= n; ++i)
		fin >> p[i];

	comb[0][0] = 1;
	for (int i = 1; i <= n; ++i)
	{
		comb[i][0] = 1;
		for (int j = 1; j <= i; ++j)
			comb[i][j] = comb[i - 1][j - 1] + comb[i - 1][j];
	}

	for (int i = 0; i <= n; ++i)
		dp[i][0] = 1.0;

    for (int i = 1; i <= n; ++i)
		for (int j = 1; j <= i; ++j)
			dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] * p[i];

	for (int i = 1; i <= n; ++i)
	{
		for (int j = 1; j <= i; ++j)
			cout << dp[i][j] << ' ';
		cout << '\n';
	}

	fout.precision(6);
	fout.setf(ios::fixed, ios::floatfield);
	fout << 1.0 / comb[n][k] * dp[n][k] << '\n';
	return 0;
}