func_code_string: #include <bits/stdc++.h>   using namespace std;   int n;   char color[16];   int r[16], b[16];   int redCount[1 << 16], blueCount[1 << 16];   int dp[1 << 16][2][257];   int calc(int mask, bool noRed, int other) {     other = min(other, n * n);     if (dp[mask][noRed][other] != -1) return dp[mask][noRed][other];     if (mask == (1 << n) - 1) return dp[mask][noRed][other] = 0;     dp[mask][noRed][other] = 1000000000;     for (int i = 0; i < n; ++i) {       if (mask & (1 << i)) continue;       int nextMask = mask | (1 << i);       int payRed = max(0, r[i] - redCount[mask]),           payBlue = max(0, b[i] - blueCount[mask]);       int haveRed = 0, haveBlue = 0;       if (noRed)         haveBlue = other;       else         haveRed = other;       int add = max(max(payRed - haveRed, payBlue - haveBlue), 0);       haveRed += add, haveBlue += add;       haveRed -= payRed, haveBlue -= payBlue;       if (haveRed == 0)         dp[mask][noRed][other] =             min(dp[mask][noRed][other], add + calc(nextMask, 1, haveBlue));       else if (haveBlue == 0)         dp[mask][noRed][other] =             min(dp[mask][noRed][other], add + calc(nextMask, 0, haveRed));     }     return dp[mask][noRed][other];   }   int main() {     cin >> n;     for (int i = 0; i < n; ++i) cin >> color[i] >> r[i] >> b[i];     for (int i = 0; i < 1 << n; ++i) {       for (int j = 0; j < n; ++j) {         if ((i & (1 << j)) == 0) continue;         if (color[j] ==  R )           redCount[i]++;         else           blueCount[i]++;       }       for (int j = 0; j < 2; ++j)         for (int k = 0; k <= 256; ++k) dp[i][j][k] = -1;     }     int needRed = 0, needBlue = 0;     for (int i = 0; i < n; ++i) {       needRed += max(0, r[i] - n);       needBlue += max(0, b[i] - n);       r[i] = min(r[i], n);       b[i] = min(b[i], n);     }     if (needRed >= needBlue)       cout << needRed + n + calc(0, 1, needRed - needBlue);     else       cout << needBlue + n + calc(0, 0, needBlue - needRed);     cout <<   n ;   }   