Cod sursa(job #2495882)

Utilizator 1chiriacOctavian Neculau 1chiriac Data 19 noiembrie 2019 22:23:28
Problema Dezastru Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("dezastru.in");
ofstream fout ("dezastru.out");
int n,k;long double prob[30];pair <long double, long long> dp[30][30];
int main () {
	long long suma=0;long double p=0.00;
	fin>>n>>k;
	for(int i=1;i<=n;++i)
		fin>>prob[i];
	for(int i=1;i<=n;++i)
		dp[1][i].first=prob[i],dp[1][i].second=1;
	//dp[i][j]=primele i atacuri care se termina cu atacul j (combinari);
	for(int i=2;i<=k;++i)
		for(int j=k;j<=n;++j)
			for(int i2=k-1;i2<j;++i2)
				dp[i][j].first=dp[i][j].first+(dp[i-1][i2].first*prob[j]),dp[i][j].second=dp[i][j].second+dp[i-1][i2].second;
	//acuma faci media aritmetica la alea;oarecum;
	for(int i=1;i<=n;++i)
		suma=suma+dp[k][i].second,p=p+dp[k][i].first;
	fout<<p/(long double)suma;
	return 0;
}