func_code_string: #include <bits/stdc++.h>   using namespace std;   const int maxn = 51;   const int tot = maxn * maxn;   long long input[maxn];   long long dp[maxn][tot][maxn];   long long dp2[maxn][tot][maxn];   long long comb[maxn + 1][maxn + 1];   int N, M;   void init() {     cin >> N;     for (int i = 0; i < N; i++) {       cin >> input[i];     }     cin >> M;     comb[0][0] = 1;     for (int i = 1; i <= maxn; i++) {       comb[i][0] = 1;       for (int j = 1; j <= i; j++) {         comb[i][j] = comb[i - 1][j] + comb[i - 1][j - 1];       }     }   }   long long factorial[maxn];   bool vst[maxn];   void run() {     int total = 0;     for (int i = 0; i < N; i++) {       total += input[i];     }     if (total <= M) {       cout << N << endl;       return;     }     for (int i = 0; i < N; i++) {       memset(vst, 0, sizeof(vst));       vst[i] = 1;       dp[i][0][0] = 1;       int cnt = 0;       for (int j = 0; j < N; j++) {         if (vst[j] == 0) {           cnt++;           for (int k = 0; k < tot; k++) {             for (int t = 0; t <= cnt; t++) {               dp2[i][k][t] = dp[i][k][t];             }           }           for (int k = 0; k < tot; k++) {             for (int t = 0; t <= cnt; t++) {               if (dp[i][k][t] && (k + input[j] < tot)) {                 dp2[i][k + input[j]][t + 1] += dp[i][k][t];               }             }           }           for (int k = 0; k < tot; k++) {             for (int t = 0; t <= cnt; t++) {               dp[i][k][t] = dp2[i][k][t];             }           }         }       }     }     double ans = 0;     for (int i = M; i >= 0; i--) {       for (int j = 0; j < N; j++) {         if (i + input[j] > M) {           for (int k = 0; k < N; k++) {             double tmp = dp[j][i][k] * 1.0 / comb[N][k];             tmp /= (N - k);             tmp *= k;             ans += tmp;           }         }       }     }     printf( %.8lf n , ans);   }   void baoli() {     const int n = 50;     int tmp[n];     cout << n <<    ;     for (int i = 0; i < n; i++) {       tmp[i] = i + 1;       cout << tmp[i] <<    ;     }     int m = 100;     cout << m << endl;     double ans = 0;     for (int test = 0; test <= 10000; test++) {       random_shuffle(tmp, tmp + n);       int sum = 0;       for (int i = 0; i < n; i++) {         sum += tmp[i];         if (sum > m) {           ans += i;           break;         }       }     }     cout << ans / 10000 << endl;   }   int main() {     init();     run();     return 0;   }   