func_code_string: #include <bits/stdc++.h>   using namespace std;   int A[55], ctos, lleno;   long long D[52][52][52][52];   double res = 0, suma;   int main() {     scanf( %d , &ctos);     for (int i = 1; i <= ctos; i++) {       scanf( %d , &A[i]);       suma += A[i];     }     scanf( %d , &lleno);     for (int quien = 1; quien <= ctos; quien++) {       for (int dnde = ctos + 1; dnde > 0; dnde--) {         for (int lleva = 0; lleva <= 50; lleva++) {           for (int lugares = 0; lugares <= ctos; lugares++) {             if (dnde == quien) {               D[dnde][lleva][lugares][quien] = D[dnde + 1][lleva][lugares][quien];             } else if (dnde > ctos) {               if (lleva == 0 and lugares == 0) {                 D[dnde][lleva][lugares][quien] = 1;               } else {                 D[dnde][lleva][lugares][quien] = 0;               }             } else if (lleva == 0 or lugares == 0) {               if (lleva == 0 and lugares == 0) {                 D[dnde][lleva][lugares][quien] = 1;               } else {                 D[dnde][lleva][lugares][quien] = 0;               }             } else {               D[dnde][lleva][lugares][quien] = D[dnde + 1][lleva][lugares][quien];               if (lleva >= A[dnde]) {                 D[dnde][lleva][lugares][quien] +=                     D[dnde + 1][lleva - A[dnde]][lugares - 1][quien];               }             }           }         }       }     }     if (suma <= lleno) {       res = ctos;     } else {       for (int i = ctos - 1; i > 0; i--) {         for (int eleg = 1; eleg <= ctos; eleg++) {           suma = 0;           for (int es = lleno - A[eleg] + 1; es <= lleno; es++) {             suma += D[1][es][i][eleg];           }           suma *= i;           for (double e = ctos; e > i; e--) {             suma /= e;           }           for (int e = 2; e <= ctos - i - 1; e++) {             suma *= e;           }           res += suma;         }       }     }     cout << res <<   n ;     return 0;   }   