BOJ 15686 : 치킨 배달 - C++
치킨 배달
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <deque>
#include <map>
#include <cmath>
#include <numeric>
#define INF 1e9
using namespace std;
int N, M, ans=INF;
int board[52][52];
vector<pair<int,int>> chicken;
vector<pair<int,int>> house;
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N >> M;
for(int i=0;i<N;i++)
for(int j=0;j<N;j++)
{
cin >> board[i][j];
if(board[i][j] == 1)
house.push_back({i,j});
else if(board[i][j] == 2)
chicken.push_back({i,j});
}
vector<int> ch(chicken.size());
fill(ch.begin(), ch.end(), 1);
for(int i=0;i<M;i++) ch[i] = 0;
do{
vector<pair<int,int>> cur_chicken;
for(int i=0;i<ch.size();i++){
if(ch[i] == 0) cur_chicken.push_back(chicken[i]);
}
/* 선택된 치킨집과 모든 집 사이의 치킨거리 최소값을 구함 */
vector<int> tmp(house.size());
for(int i=0;i<house.size();i++)
{
int val=INF;
for(int j=0;j<cur_chicken.size();j++)
{
int dist = abs(house[i].first - cur_chicken[j].first) +
abs(house[i].second - cur_chicken[j].second);
val = min(val, dist);
}
tmp[i] = val;
}
int sum = accumulate(tmp.begin(), tmp.end(), 0);
ans = min(ans,sum);
}while(next_permutation(ch.begin(), ch.end()));
cout << ans;
return 0;
}
- 로직
총 치킨집의 개수
중 M개
를 뽑는 조합
으로 치킨집을 고름
치킨집
과 집간
의 치킨거리
를 구해서 최소값
을 찾음
Author And Source
이 문제에 관하여(BOJ 15686 : 치킨 배달 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://velog.io/@neity16/BOJ-15686-치킨-배달-C
저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <iostream> #include <algorithm> #include <vector> #include <deque> #include <map> #include <cmath> #include <numeric> #define INF 1e9 using namespace std; int N, M, ans=INF; int board[52][52]; vector<pair<int,int>> chicken; vector<pair<int,int>> house; int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); cin >> N >> M; for(int i=0;i<N;i++) for(int j=0;j<N;j++) { cin >> board[i][j]; if(board[i][j] == 1) house.push_back({i,j}); else if(board[i][j] == 2) chicken.push_back({i,j}); } vector<int> ch(chicken.size()); fill(ch.begin(), ch.end(), 1); for(int i=0;i<M;i++) ch[i] = 0; do{ vector<pair<int,int>> cur_chicken; for(int i=0;i<ch.size();i++){ if(ch[i] == 0) cur_chicken.push_back(chicken[i]); } /* 선택된 치킨집과 모든 집 사이의 치킨거리 최소값을 구함 */ vector<int> tmp(house.size()); for(int i=0;i<house.size();i++) { int val=INF; for(int j=0;j<cur_chicken.size();j++) { int dist = abs(house[i].first - cur_chicken[j].first) + abs(house[i].second - cur_chicken[j].second); val = min(val, dist); } tmp[i] = val; } int sum = accumulate(tmp.begin(), tmp.end(), 0); ans = min(ans,sum); }while(next_permutation(ch.begin(), ch.end())); cout << ans; return 0; }
- 로직
총 치킨집의 개수
중M개
를뽑는 조합
으로 치킨집을 고름치킨집
과집간
의치킨거리
를 구해서최소값
을 찾음
Author And Source
이 문제에 관하여(BOJ 15686 : 치킨 배달 - C++), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@neity16/BOJ-15686-치킨-배달-C저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)