func_code_string: #include <bits/stdc++.h>   using namespace std;   int n, b, t[32], c[32], s[1 << 11], cnt[1 << 11];   bool dp[12][25][1 << 11];   int main() {     scanf( %d , &n);     for (int i = 1; i <= n; ++i) {       scanf( %d , t + i);       if (t[i] > 1) c[++b] = t[i];     }     if (n == 1) {       puts( YES );       return 0;     }     if (b * 2 > n - 1) {       puts( NO );       return 0;     }     sort(c + 1, c + b + 1);     if (c[b] < n) {       puts( NO );       return 0;     }     dp[0][n - b][0] = 1;     for (int S = 1; S < (1 << b); S++) {       s[S] = s[S & (S - 1)] + c[__builtin_ctz(S) + 1];       cnt[S] = cnt[S & (S - 1)] + 1;     }     for (int i = 1; i <= b; ++i)       for (int j = 0; j <= n - b; ++j) {         for (int S = 0; S < (1 << (i - 1)); S++) {           bool z = 0;           int cS = ((1 << (i - 1)) - 1) ^ S;           for (int T = cS; !z; T = (T - 1) & cS) {             for (int k = j; k <= n - b; ++k) {               if (dp[i - 1][k][S ^ T] && s[T] + k - j == c[i] - 1 &&                   k - j + cnt[T] >= 2) {                 z = 1;                 break;               }             }             if (!T) break;           }           if (z) dp[i][j][S ^ (1 << (i - 1))] = 1;         }       }     puts(dp[b][0][1 << (b - 1)] ?  YES  :  NO );     return 0;   }   