10881 : 프로도의 선물 포장

풀이

경우의 수가 그리 많지 않아 모든 경우를 다 탐색해 보면 된다.

각 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, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-11-30 10:47

Read more posts by this author