func_code_string: #include <bits/stdc++.h>   using namespace std;   const int N = 5005, K = 6, INF = 1000000000;   int n;   int t[N][3], pass[3], hack[3];   bool ch[N][3];   int nhack[K][3];   int calcs(int lv, int t) {     if (t == 0) {       return 0;     } else {       return 500 * (lv + 1) * (250 - t) / 250;     }   }   const int L = 105;   int dp[L][L][L];   int main() {     scanf( %d , &n);     for (int i = 0; i < n; ++i) {       for (int j = 0; j < 3; ++j) {         int tmp;         scanf( %d , &tmp);         if (tmp < 0) {           t[i][j] = -tmp;           ch[i][j] = true;           ++pass[j];           ++hack[j];         } else if (tmp == 0) {         } else {           t[i][j] = tmp;           ch[i][j] = false;           ++pass[j];         }       }     }     int ans = n;     for (int i = 0; i < 6; ++i) {       int c = 2 << i, minp = i == 5 ? 0 : n / c + 1, maxp = 2 * n / c;       for (int j = 0; j < 3; ++j) {         if (pass[j] >= minp && pass[j] - hack[j] <= maxp) {           nhack[i][j] = min(hack[j], pass[j] - minp);         } else {           nhack[i][j] = -1;         }       }     }     for (int ai = 0; ai < 6; ++ai) {       int la = nhack[ai][0];       if (la != -1) {         for (int bi = 0; bi < 6; ++bi) {           int lb = nhack[bi][1];           if (lb != -1) {             for (int ci = 0; ci < 6; ++ci) {               int lc = nhack[ci][2];               if (lc != -1) {                 int myscore = calcs(ai, t[0][0]) + calcs(bi, t[0][1]) +                               calcs(ci, t[0][2]) + (la + lb + lc) * 100;                 if (myscore >= calcs(ai, 1) + calcs(bi, 1) + calcs(ci, 1)) {                   ans = 1;                   printf( %d n , ans);                   return 0;                 }                 for (int i = 0; i <= la; ++i) {                   for (int j = 0; j <= lb; ++j) {                     for (int k = 0; k <= lc; ++k) {                       dp[i][j][k] = 0;                     }                   }                 }                 int lv[3];                 lv[0] = ai, lv[1] = bi, lv[2] = ci;                 int buf = 0;                 for (int i = 1; i < n; ++i) {                   vector<int> sol;                   for (int j = 0; j < 8; ++j) {                     bool dup = false;                     for (int k = 0; k < (int)sol.size() && !dup; ++k) {                       int s = sol[k];                       dup = dup | ((s & j) == s);                     }                     if (dup) {                       continue;                     }                     int tmpscore = 0;                     for (int k = 0; k < 3; ++k) {                       if ((j >> k) & 1) {                         if (!ch[i][k]) {                           tmpscore = INF;                           break;                         }                       } else {                         tmpscore += calcs(lv[k], t[i][k]);                       }                     }                     if (tmpscore <= myscore) {                       sol.push_back(j);                     }                   }                   if (sol.size() == 0) {                     continue;                   } else if (sol[0] == 0) {                     ++buf;                     continue;                   }                   {                     if (dp[la][lb][lc] == la + lb + lc) {                       continue;                     }                     for (int i = la; i >= 0; --i) {                       for (int j = lb; j >= 0; --j) {                         for (int k = lc; k >= 0; --k) {                           for (int l = 0; l < (int)sol.size(); ++l) {                             int ni = i + (sol[l] & 1),                                 nj = j + ((sol[l] >> 1) & 1),                                 nk = k + ((sol[l] >> 2) & 1);                             if (dp[ni][nj][nk] < dp[i][j][k] + 1) {                               dp[ni][nj][nk] = dp[i][j][k] + 1;                             }                           }                         }                       }                     }                   }                 }                 ans = min(ans, n - (dp[la][lb][lc] + buf));               }             }           }         }       }     }     printf( %d n , ans);     return 0;   }   