Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- int n;
- vector<vector<int>> cnt;
- int go(vector<vector<int>> v) {
- int same = 0;
- for(int i = 0; i < 26; i++) {
- int mn = 1e5;
- for(int j = 0; j < v.size(); j++) {
- mn = min(mn, v[j][i]);
- }
- same += mn;
- for(int j = 0; j < v.size(); j++) {
- v[j][i] -= mn;
- }
- }
- if((int)v.size() == 1) return same;
- int mn = 1e9;
- for(int sub_mask = 1; sub_mask < (1 << v.size()) - 1; sub_mask++) {
- vector<vector<int>> one, two;
- for(int i = 0; i < v.size(); i++) if(sub_mask >> i & 1) one.push_back(v[i]); else two.push_back(v[i]);
- assert(one.size() && two.size());
- mn = min(mn, go(one) + go(two));
- }
- return mn + same;
- }
- void solve() {
- cin >> n;
- cnt.resize(n, vector<int>(26));
- for(int i = 0; i < n; i++) for(int j = 0; j < 26; j++) cin >> cnt[i][j];
- int ans = 1e9;
- for(int i = 0; i < n; i++)
- for(int j = i+1; j < n; j++)
- for(int k = j+1; k < n; k++)
- for(int l = k+1; l < n; l++) {
- ans = min(ans, go({cnt[i], cnt[j], cnt[k], cnt[l]}));
- }
- cout << ++ans << "\n";
- }
- int main() {
- int tc;
- cin >> tc;
- while(tc--) solve();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement