티스토리 뷰

Algorithm/BOJ

15686 치킨 배달

henry1214 2018. 4. 16. 02:37

https://www.acmicpc.net/problem/15686



치킨집 중에서 M개를 고르는 모든 조합을 만든 후 각각의 집을 가장 가까운 치킨집에 연결시킨다. 모든 경우 중 최소값이 답이다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>
#define INF 987654321
using namespace std;
 
int n,m,t,lenh,lenc,ans=INF;
vector<pair<int,int>> h,c;
 
int dist(pair<int,int> a,pair<int,int> b)
{
    return abs(a.first-b.first)+abs(a.second-b.second);
}
 
int main()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            scanf("%d",&t);
            if(t==1) h.push_back({i,j});
            else if(t==2) c.push_back({i,j});
        }
    }
    lenh=h.size(),lenc=c.size();
    vector<int> p(lenc,1);
    for(int i=0;i<m;i++) p[i]=0;
    do
    {
        int sum=0;
        for(int i=0;i<lenh;i++)
        {
            int minv=INF;
            for(int j=0;j<lenc;j++)
                if(!p[j]) minv=min(minv,dist(h[i],c[j]));
            sum+=minv;
        }
        ans=min(ans,sum);
    } while(next_permutation(p.begin(),p.end()));
    printf("%d\n",ans);
    return 0;
}
cs


'Algorithm > BOJ' 카테고리의 다른 글

3067 Coins  (0) 2018.05.19
15685 드래곤 커브  (3) 2018.04.16
14891 톱니바퀴  (0) 2018.04.09
14890 경사로  (0) 2018.04.09
14889 스타트와 링크  (0) 2018.04.09
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday