15686 치킨배달

동도리동·2021년 10월 15일
0

코딩테스트

목록 보기
61/76

오랜만에 조합을 썼당

#include <iostream>
#include <vector>
#include <algorithm>
#include <tuple>
using namespace std;
int map[50][50];
vector<pair<int, int> > v;
vector<pair<int, int> > house;
vector<pair<int, int> > v2;
pair<int,int> chiken[13];
int n, m;
int dx[4] = { 1,-1,0,0 };
int dy[4] = { 0,0,1,-1 };
int ans = -1;
void DFS(int idx, int L) {
	if (L==m) {
		int sum = 0;
		for (int i = 0; i<house.size();i++) {
			int cnt = -1;
			int x1, y1;
			tie(x1, y1) = house[i];
			for (int j = 0; j < L; j++) {
				int x2, y2;
				tie(x2, y2) = chiken[j];
				int tmp = abs(x1 - x2) + abs(y1 - y2);
				if (cnt == -1 || cnt > tmp) cnt = tmp;
			}
			sum += cnt;
		}
		if (ans == -1 || ans > sum) ans = sum;
	}
	else {
		for (int i = idx; i < v.size(); i++) {
			chiken[L] = v[i];
			DFS(i + 1, L+1);
		}
	}
}

int main() {
	//freopen("in1.txt", "rt", stdin);
	cin >> n >> m;
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			cin >> map[i][j];
			if (map[i][j] == 1) house.push_back(make_pair(i, j));
			else if (map[i][j] == 2) v.push_back(make_pair(i, j));
		}
	}
	DFS(0, 0);
	cout << ans << '\n';
	return 0;
}
profile
긍정코딩세상

0개의 댓글

관련 채용 정보