풀이
경우의 수가 그리 많지 않아 모든 경우를 다 탐색해 보면 된다.
각 3개의 직사각형을 옆으로 눕히는 경우까지 고려하면
6^3
즈음의 계산을 해야함을 알 수 있다.
돌려돌려~~
코드
#include <cstdio>
#include <algorithm>
using namespace std;
int a[6], b[6];
inline int one(int i, int j, int k) {
return (a[i]+a[j]+a[k])*max({b[i],b[j],b[k]});
}
inline int two(int i, int j, int k) {
return max(a[i]+a[j],a[k])*(max(b[i],b[j])+b[k]);
}
int go() {
int ret = 1e9;
for (int i = 0; i < 6; i++) {
for (int j = 0; j < 6; j++) {
for (int k = 0; k < 6; k++) {
if (i%3==j%3 || j%3==k%3 || k%3==i%3) {
continue;
}
ret = min(ret, one(i,j,k));
ret = min(ret, two(i,j,k));
}
}
}
return ret;
}
int main() {
int tc;
for (scanf("%d", &tc); tc--;) {
for (int i = 0; i < 3; i++) {
int x, y;
scanf("%d %d", &x, &y);
a[i] = b[i+3] = x;
b[i] = a[i+3] = y;
}
printf("%d\n", go());
}
return 0;
}
아무말
백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이