#include void print(int ** matrix, int a) { for(int i = 0; i < a; i++) { for(int j = 0; j < a; j++) printf("%d ", matrix[i][j]); //printf("(%d,%d)%d ", i,j, matrix[i][j]); printf("\n"); } } #define MIN2(a,b) ((a) < (b) ? (a) : (b)) #define MAX2(a,b) ((a) > (b) ? (a) : (b)) int main() { int N,Ni; scanf("%d", &N); for( Ni = 0; Ni < N; Ni++ ) { int height; scanf("%d", &height); int * front = new int[height]; int * right = new int[height]; for(int i = 0; i < height; i++) scanf("%d", &front[i]); for(int i = 0; i < height; i++) scanf("%d", &right[i]); int minimal = 0; int maximal = 0; int ** matrix = new int* [height]; for(int i = 0; i < height; i++) { matrix[i] = new int[height]; for(int j = 0; j < height; j++) { if(front[i] == right[j]) matrix[i][j] = front[i]; else matrix[i][j] = 0; } } int sum1 = 0, sum2 = 0; for(int i = 0; i < height; i++) { sum1 += front[i]; sum2 += right[i]; } minimal = MAX2(sum1, sum2); /** for(int i = 0; i < height; i++) { int max = 0; for(int k = 0; k < height; k++) { if(matrix[i][k] > max) max = matrix[i][k]; } front[i] = max; } for(int i = 0; i < height; i++) { int max = 0; for(int k = 0; k < height; k++) { if(matrix[k][i] > max) max = matrix[k][i]; } right[i] = max; } printf("------\n"); for(int i = 0; i < height; i++) printf("%d ", front[i]); printf("\n"); for(int i = 0; i < height; i++) printf("%d ", right[i]); printf("\n----\n"); print(matrix, height); **/ //print(matrix, height); for(int i = 0; i < height; i++) { for(int j = 0; j < height; j++) { matrix[i][j] = MIN2(front[i], right[j]); maximal += MIN2(front[i], right[j]); } } //printf("----\n"); //print(matrix, height); printf("Minimalni budova obsahuje %d kostek, maximalni %d kostek.\n", minimal, maximal); } }