Cod sursa(job #2504707)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 5 decembrie 2019 13:35:19
Problema Dezastru Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <bits/stdc++.h>
#include <map>
#define pb push_back
#define ll long long
using namespace std;
int N,K;
double factorial;
double v[30];
double ans;
double dp[30][30];
/*
void calculare_prob(int c[],int k)
{
    int i,ok=0;
    double prod=1;
   // if(k+1<K)
    //{
      //  return;
    //}
   for(i=0;i<=k;i++)
    {
        cout<<c[i]<<" ";
    }
    cout<<"\n";
    for(i=0;i<=K-1;i++)
    {
        prod*=v[c[i]];
    }
    cout<<prod<<"\n";
    ans+=prod;
}
void comb(int p,int k,int n,int c[])
{
    if(p==k+1)
    {
        calculare_prob(c,k);
        return;
    }
    int i;
    for(i=c[p-1]+1;i<=n;i++)
    {
        c[p]=i;
        comb(p+1,k,n,c);
    }
}
void reinit(int c[])
{
    for(int i=0;i<=26;i++)
    {
        c[i]=0;
    }
}*/
int main()
{
    int i,j,c[30];
    ifstream fin("dezastru.in");
    ofstream fout("dezastru.out");
    fin>>N>>K;
    factorial=1;
    for(i=2;i<=N;i++)
    {
        factorial*=i;
    }
    for(i=0;i<=N-1;i++)
    {
        fin>>v[i+1];
    }
    for(i=0;i<=N;i++)
    {
        dp[i][0]=1;
    }
    double up=1,down=1;
    for(i=K+1;i<=N;i++)
    {
        up*=i;
    }
    for(i=1;i<=N-K;i++)
    {
        down*=i;
    }
    factorial=up/down;
    for(i=1;i<=N;i++)
        for(j=1;j<=K;j++)
    {
        dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*v[i];
    }
    //cout<<dp[N][K]<<'\n';
    fout << fixed << setprecision(6) << dp[N][K]/factorial << '\n';
    fin.close();
    fout.close();
    return 0;
}