func_code_string: #include <bits/stdc++.h>   using namespace std;   double Cnk(int n, int k) {     double result = 1;     for (int i = 1; i <= k; ++i) {       result *= n - k + i;       result /= i;     }     return result;   }   double Power(int n, int power) {     double result = 1;     for (int i = 0; i < power; ++i) {       result *= n;     }     return result;   }   int main() {     int n, m;     cin >> n >> m;     vector<int> a(m);     for (int i = 0; i < m; ++i) {       cin >> a[i];     }     vector<vector<vector<double> > > p(n + 1);     for (int i = 0; i <= n; ++i) {       p[i].resize(m + 1);       for (int j = 0; j <= m; ++j) {         p[i][j].assign(n + 1, 0);       }     }     for (int j = 0; j <= m; ++j) {       p[0][j][0] = 1;       for (int i = 1; i <= n; ++i) {         p[0][j][i] = 0;         p[i][j][0] = 0;       }     }     for (int i = 0; i <= n; ++i) {       for (int k = 0; k <= n; ++k) {         if (k == (i + a[0] - 1) / a[0]) {           p[i][1][k] = 1;         } else {           p[i][1][k] = 0;         }       }     }     for (int j = 2; j <= m; ++j) {       for (int i = 1; i <= n; ++i) {         for (int k = 1; k <= n; ++k) {           p[i][j][k] = 0;           for (int h = a[j - 1] * k - a[j - 1] + 1;                (h <= i) && (h < a[j - 1] * (k + 1) - a[j - 1] + 1); ++h) {             double sum = 0;             for (int l = 0; l <= k; ++l) {               sum += p[i - h][j - 1][l];             }             p[i][j][k] += Cnk(i, h) * Power(j - 1, i - h) * sum;           }           for (int h = 0; (h <= i) && (h < k * a[j - 1] - a[j - 1] + 1); ++h) {             p[i][j][k] += Cnk(i, h) * Power(j - 1, i - h) * p[i - h][j - 1][k];           }           p[i][j][k] /= Power(j, i);         }       }     }     double E = 0;     for (int i = 0; i <= n; ++i) {       E += i * p[n][m][i];     }     printf( %.10lf , E);     getchar();     getchar();     return 0;   }   