func_code_string: #include <bits/stdc++.h>   #pragma comment(linker,  /STACK:1024000000,1024000000 )   template <class T>   bool scanff(T &ret) {     char c;     int sgn;     T bit = 0.1;     if (c = getchar(), c == EOF) return 0;     while (c !=  -  && c !=  .  && (c <  0  || c >  9 )) c = getchar();     sgn = (c ==  - ) ? -1 : 1;     ret = (c ==  - ) ? 0 : (c -  0 );     while (c = getchar(), c >=  0  && c <=  9 ) ret = ret * 10 + (c -  0 );     if (c ==     || c ==   n ) {       ret *= sgn;       return 1;     }     while (c = getchar(), c >=  0  && c <=  9 ) ret += (c -  0 ) * bit, bit /= 10;     ret *= sgn;     return 1;   }   using namespace std;   long long dp[55][55][55];   int a[55];   int n, sum;   double ans;   int main() {     ans = 0.0;     scanff(n);     int tot = 0;     for (int i = int(1); i <= int(n); i++) scanff(a[i]), tot += a[i];     scanff(sum);     if (tot <= sum) {       printf( %.10f n , n * 1.0);       return 0;     }     for (int c = int(1); c <= int(n); c++) {       memset(dp, 0, sizeof(dp));       dp[0][0][0] = 1;       for (int i = int(1); i <= int(n); i++) {         for (int j = int(0); j <= int(i - 1); j++)           for (int k = int(0); k <= int(sum); k++) {             if (dp[i - 1][j][k]) {               dp[i][j][k] += dp[i - 1][j][k];               if (i != c && k + a[i] <= sum)                 dp[i][j + 1][k + a[i]] += dp[i - 1][j][k];             }           }       }       for (int j = int(1); j <= int(n); j++) {         for (int k = int(max(0, sum - a[c] + 1)); k <= int(50); k++) {           if (dp[n][j][k]) {             double temp = dp[n][j][k] * j;             int num = n - j;             int n1 = n - j, n2 = n;             for (int l = int(1); l <= int(num); l++) {               temp *= double(n1);               temp /= double(n2);               n1--;               n2--;             }             temp /= double(n - j);             ans += temp;           }         }       }     }     printf( %.10f n , ans);     return 0;   }   