File tree Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Expand file tree Collapse file tree 1 file changed +40
-0
lines changed Original file line number Diff line number Diff line change
1
+ // http://boj.kr/445279200beb4050ac92ffc9dc68d68b
2
+ #include < bits/stdc++.h>
3
+ using namespace std ;
4
+
5
+ #define X first
6
+ #define Y second
7
+
8
+ int board[55 ][55 ];
9
+ int n, m;
10
+ vector<pair<int ,int >> chicken;
11
+ vector<pair<int ,int >> house;
12
+
13
+ int main (void ) {
14
+ ios::sync_with_stdio (0 );
15
+ cin.tie (0 );
16
+ cin >> n >> m;
17
+ for (int i = 0 ; i < n; i++){
18
+ for (int j = 0 ; j < n; j++){
19
+ cin >> board[i][j];
20
+ if (board[i][j] == 1 ) house.push_back ({i, j});
21
+ if (board[i][j] == 2 ) chicken.push_back ({i, j});
22
+ }
23
+ }
24
+ vector<int > brute (chicken.size (), 1 );
25
+ fill (brute.begin (), brute.begin () + chicken.size () - m, 0 ); // 앞의 chicken.size() - m 칸은 0, 뒤의 m칸은 1
26
+ int mn = 0x7f7f7f7f ; // 답을 저장할 변수
27
+ do {
28
+ int dist = 0 ; // 도시의 치킨 거리를 저장할 변수
29
+ for (auto h : house){
30
+ int tmp = 0x7f7f7f7f ; // 집의 치킨 거리를 저장할 변수
31
+ for (int i = 0 ; i < chicken.size (); i++){
32
+ if (brute[i] == 0 ) continue ;
33
+ tmp = min (tmp, abs (chicken[i].X - h.X ) + abs (chicken[i].Y - h.Y )); // 집의 치킨 거리 갱신
34
+ }
35
+ dist += tmp;
36
+ }
37
+ mn = min (mn, dist);
38
+ }while (next_permutation (brute.begin (), brute.end ()));
39
+ cout << mn;
40
+ }
You can’t perform that action at this time.
0 commit comments