Advertisement
vinayak7989

Untitled

Sep 25th, 2022
672
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int n;
  4. vector<vector<int>> cnt;
  5. int go(vector<vector<int>> v) {
  6.       int same = 0;
  7.       for(int i = 0; i < 26; i++) {
  8.             int mn = 1e5;
  9.             for(int j = 0; j < v.size(); j++) {
  10.                    mn = min(mn, v[j][i]);
  11.             }
  12.             same += mn;
  13.             for(int j = 0; j < v.size(); j++) {
  14.                   v[j][i] -= mn;
  15.             }
  16.       }
  17.       if((int)v.size() == 1) return same;
  18.       int mn = 1e9;
  19.       for(int sub_mask = 1; sub_mask < (1 << v.size()) - 1; sub_mask++) {
  20.             vector<vector<int>> one, two;
  21.             for(int i = 0; i < v.size(); i++) if(sub_mask >> i & 1) one.push_back(v[i]); else two.push_back(v[i]);
  22.             assert(one.size() && two.size());
  23.             mn = min(mn, go(one) + go(two));
  24.       }
  25.       return mn + same;
  26. }
  27. void solve() {
  28.       cin >> n;
  29.       cnt.resize(n, vector<int>(26));
  30.       for(int i = 0; i < n; i++) for(int j = 0; j < 26; j++) cin >> cnt[i][j];
  31.      
  32.       int ans = 1e9;
  33.       for(int i = 0; i < n; i++)
  34.             for(int j = i+1; j < n; j++)
  35.                   for(int k = j+1; k < n; k++)
  36.                         for(int l = k+1; l < n; l++) {
  37.                               ans = min(ans, go({cnt[i], cnt[j], cnt[k], cnt[l]}));
  38.                         }
  39.       cout << ++ans << "\n";
  40. }
  41. int main() {
  42.       int tc;
  43.       cin >> tc;
  44.       while(tc--) solve();
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement