728x90
반응형
목차
https://www.acmicpc.net/problem/14889
문제
문제 구현 방향
N/2만큼을 고르는 모든 조합을 구한 뒤에 그 조합에서 2개를 고르는 조합을 통해 가장 작은 차이를 구해주었다.
참고
https://be-senior-developer.tistory.com/49
코드 구현
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<map>
#include<queue>
#include<math.h>
using namespace std;
int N;
int board[100][100] = { 0 };
int minG = 9999999;
vector<int> v;
vector<int> v2;
//조합에서 2개씩 골라주어 더해준다.
int status(vector<int>&v) {
int sum = 0;
for (int i = 0; i < v.size(); i++) {
for (int j = i + 1; j < v.size(); j++) {
sum += board[v[i]][v[j]];
sum += board[v[j]][v[i]];
}
}
return sum;
}
//모든 조합을 구해준다.
void combi(int n, int here) {
if (v.size() == n) {
for (int j = 0; j < N; j++) {
if (find(v.begin(), v.end(), j) == v.end()) {
v2.push_back(j);
}
}
minG = min(minG, abs(status(v) - status(v2)));
v2.clear();
return;
}
for (int i = here; i < N; i++) {
v.push_back(i);
combi(n, i + 1);
v.pop_back();
}
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> N;
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> board[i][j];
}
}
combi(N/2, 0);
cout << minG;
}
반응형
'백준 문제풀이' 카테고리의 다른 글
[백준][구현] 17143 낚시왕 c++구현 (0) | 2024.08.16 |
---|---|
[백준][브루트포스][구현][백트래킹] 12100 2048 c++구현 (0) | 2024.08.13 |
[백준][구현] 17144 미세먼지 안녕! c++구현 (0) | 2024.08.06 |
[백준][그리디] 1700 멀티탭 스케줄링 c++구현 (0) | 2024.08.05 |
[백준][그리디] 1781 컵라면 c++구현 (0) | 2024.08.04 |