func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, m;   vector<int> ve;   const int MAX = 51;   long long C[MAX][MAX];   void build() {     for (int i = 0; i < MAX; ++i)       for (int j = 0; j < MAX; ++j)         C[i][j] = (j == 0) ? 1 : ((i == 0) ? 0 : C[i - 1][j - 1] + C[i - 1][j]);   }   double memo[MAX][MAX][MAX];   double solve(int i, int last, int mx) {     if (i == m) {       if (last != n) return 0;       return mx;     }     double &ret = memo[i][last][mx];     if (ret == ret) return ret;     ret = 0;     for (int j = 0; j <= n - last; j++) {       ret += C[n - last][j] * 1LL *              solve(i + 1, last + j, max(mx, (j / ve[i]) + (j % ve[i] != 0)));     }     return ret;   }   int main() {     ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);     build();     cin >> n >> m;     for (int i = 0; i < m; i++) {       int x;       cin >> x;       ve.push_back(x);     }     memset(memo, -1, sizeof memo);     cout << fixed << setprecision(20) << powl(1.0 / m, n) * solve(0, 0, 0)          << endl;     return 0;   }   