func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   int a[50];   double dp[51][51][51];   bool viz[51][51][51];   long long choose[51][51];   double go(int i, int j, int k) {     if (i == m - 1) return j <= a[i] * k;     double &d = dp[i][j][k];     if (viz[i][j][k]) return d;     double res = 0;     for (int l = 0; l <= min(j, a[i] * k); l++) {       res += choose[j][l] * pow(m - i - 1, j - l) / pow(m - i, j) *              go(i + 1, j - l, k);     }     viz[i][j][k] = 1;     return d = res;   }   int main() {     cin >> n >> m;     for (int i = 0; i < m; i++) cin >> a[i];     for (int i = 0; i <= n; i++) choose[i][0] = 1;     for (int i = 1; i <= n; i++)       for (int j = 1; j <= i; j++)         choose[i][j] = choose[i - 1][j - 1] + choose[i - 1][j];     double r = 0;     for (int i = 1; i <= n; i++) {       double p = go(0, n, i) - go(0, n, i - 1);       r += i * p;     }     printf( %.9lf n , r);   }   