func_code_string: #include <bits/stdc++.h>   const int inf = (1ll << 30) - 1;   const int maxn = (int)1e5 + 10;   using namespace std;   int dp[150][(1 << 16) + 100];   int c[111];   int r[111];   int b[111];   char temp[111];   int cntR[(1 << 16) + 10];   int cntB[(1 << 16) + 10];   int n;   void solve() {     memset(dp, -1, sizeof dp);     queue<pair<pair<int, int>, int> > pq;     scanf( %d , &n);     int xx = 0;     for (int i = 0; i < n; i++) {       scanf( %s%d%d , temp, &r[i], &b[i]);       c[i] = temp[0] ==  R  ? 1 : 0;       xx += c[i];     }     for (int i = 0; i < (1 << n); i++) {       for (int j = 0; j < n; j++) {         if (i & (1 << j)) {           if (c[j])             cntR[i]++;           else             cntB[i]++;         }       }     }     dp[0][0] = 0;     pq.push(make_pair(make_pair(0, 0), 0));     while (pq.size() > 0) {       int x = pq.front().first.first;       int y = pq.front().first.second;       int mask = pq.front().second;       pq.pop();       if (dp[x][mask] < y) continue;       for (int i = 0; i < n; i++) {         if (mask & (1 << i)) continue;         int nmask = mask | (1 << i);         int X = x, Y = y;         if (r[i] >= cntR[mask]) {           X += cntR[mask];         } else           X += r[i];         if (b[i] >= cntB[mask]) {           Y += cntB[mask];         } else           Y += b[i];         if (dp[X][nmask] == -1 || dp[X][nmask] < Y) {           dp[X][nmask] = Y;           pq.push(make_pair(make_pair(X, Y), nmask));         }       }     }     int sumA = 0, sumB = 0;     for (int i = 0; i < n; i++) {       sumA += r[i];       sumB += b[i];     }     int ans = inf;     for (int i = 0; i < 144; i++) {       if (dp[i][(1 << n) - 1] == -1) continue;       ans = min(ans, max(sumA - i, sumB - dp[i][(1 << n) - 1]));     }     printf( %d n , ans + n);   }   int main() {     int t = 1;     for (int i = 1; i <= t; i++) {       solve();     }     return 0;   }   