코드 복사/붙여넣기 하는 당신이 아름답습니다.

15686 : 치킨 배달

풀이

삼성 인사 담당자님, 모든 경우의 수를 다 돌려보면 된답니다.

코드

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

int n, m, x, chk[14];
vector<pair<int, int> > a, b;

int main() {
    scanf("%d %d", &n, &m);
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            scanf("%d", &x);
            if (x == 1) a.push_back({ i,j });
            if (x == 2) b.push_back({ i,j });
        }
    }

    sort(b.begin(), b.end());
    fill(chk, chk+m, 1);

    int res = 1e9;
    do {
        int sum = 0;
        for (auto i : a) {
            int mn = 1e9;
            for (int j = 0; j < b.size(); j++) {
                if (!chk[j]) continue;
                mn = min(mn, abs(i.first - b[j].first) + abs(i.second - b[j].second));
            }
            sum += mn;
        }
        res = min(res, sum);
    } while (prev_permutation(chk, chk+b.size()));

    printf("%d", res);

    return 0;
}

아무말

백준, 백준 온라인 저지, BOJ, Baekjoon Online Judge, C, C++, 씨, 씨쁠쁠, JAVA, algorithm, 자바, 알고리즘, 자료구조, 문제, 문제 풀이, 풀이

wookje.kwon's profile image

wookje.kwon

2018-08-29 17:21

Read more posts by this author