func_code_string: #include <bits/stdc++.h>   using namespace std;   void read(int &k) {     k = 0;     char x = getchar();     while (x <  0  || x >  9 ) x = getchar();     while (x >=  0  && x <=  9 ) {       k = k * 10 - 48 + x;       x = getchar();     }   }   int n, a[55], K;   long double dp[55][55][55], ans, fac[55];   int main() {     scanf( %d , &n);     int sum = 0;     for (int i = 0; i < n; i++) scanf( %d , &a[i]), sum += a[i];     scanf( %d , &K);     if (sum <= K) {       printf( %.9lf n , double(n));       return 0;     }     for (int i = 0; i < n; i++) fac[0] = 1;     for (int i = 1; i <= n; i++) fac[i] = fac[i - 1] * i;     for (int pos = 0; pos < n; pos++) {       memset(dp, 0, sizeof dp);       dp[0][0][0] = 1;       for (int i = 0; i < n; i++) {         if (i == pos) {           memcpy(dp[i + 1], dp[i], sizeof dp[i]);           continue;         }         for (int j = 0; j <= i; j++)           for (int k = 0; k <= K; k++) {             if (k + a[i] <= K) dp[i + 1][j + 1][k + a[i]] += dp[i][j][k];             dp[i + 1][j][k] += dp[i][j][k];           }       }       for (int i = 1; i <= n; i++)         for (int j = max(K - a[pos] + 1, 1); j <= K; j++)           ans += ((long double)dp[n][i][j]) * fac[i] * fac[n - i - 1] * i;     }     ans /= fac[n];     printf( %.9lf n , double(ans));     return 0;   }   