#include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef unsigned long long int ull; #define PB push_back #define MP make_pair #define FOR(prom, a, b) for(int prom = (a); prom < (b); prom++) #define FORD(prom, a, b) for(int prom = (a); prom > (b); prom--) #define FORDE(prom, a, b) for(int prom = (a); prom >= (b); prom--) #define MM(co, cim) memset((co), (cim), sizeof((co))) #define DEB(x) cerr << ">>> " << #x << " : " << x << endl; int pole[100][100]; int dole[100]; int vpravo[100]; int doleMax[100]; int vpravoMax[100]; int main ( void ) { int zadani; cin >> zadani; for(int i = 0; i < zadani; i++) { int size; cin >> size; for(int j = 0; j < size; j++){ cin >> dole[j]; doleMax[j] = 0; } for(int j = 0; j < size; j++) { cin >> vpravo[j]; vpravoMax[j] = 0; } int sum = 0; for(int j = 0; j < size; j++) { for(int k = 0; k < size; k++) { sum += dole[j] < vpravo[k] ? dole[j] : vpravo[k]; } } /* cout << "---------------------" << endl; for(int j = 0; j < size; j++) { cout << dole[j] << " " << vpravo[j] << endl; } cout << "---------------------" << endl; */ int min = 0; /* Prochazim radky */ for(int j = 0; j < size; j++) { int current = vpravo[j]; int bestFitPosition = -1; int possibleFitPosition = -1; for(int k = 0; k < size; k++) { if (dole[k] == doleMax[k]) { possibleFitPosition = k; continue; } else { if (dole[k] > current) { bestFitPosition = k; } else if (dole[k] == current) { bestFitPosition = k; break; } } } if (bestFitPosition == -1) bestFitPosition = possibleFitPosition; pole[j][bestFitPosition] = current; vpravoMax[j] = current; doleMax[bestFitPosition] = current; /* cout << "bestfitposition: " << bestFitPosition << endl; */ min += current; } /* Prochazim sloupce */ for(int k = 0; k < size; k++) { if (dole[k] == doleMax[k]) { continue; } else { min += dole[k]; } /* int current = dole[k]; int bestFitPosition = -1; int possibleFitPosition = -1; for(int j = 0; j < size; j++) { if (dole[k] > current) { bestFitPosition = k; } else if (dole[k] > current) { bestFitPosition = k; break; } }*/ } cout << "Minimalni budova obsahuje " << min << " kostek, maximalni " << sum << " kostek." << endl; } return 0; }