Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- dfs
- 시간 복잡도
- 원판 돌리기
- 5397
- 자료구조
- ㅣ풀이
- C/C++ 구현
- 해시 구현
- Stack 이란
- c#
- 백준 2447
- 1764
- 백준 17822
- AVL 시간 복잡도
- 백준 17779
- 스택의 특징
- 게리멘더링2
- 백준 5397
- 백준 17471
- 해시구현
- 풀이
- 백준 1158
- 백준 1406
- 별 찍기 10
- 구현
- 버킷 정렬
- heap
- 조세퍼스 순열
- qorwns
- 백준
Archives
- Today
- Total
홍시홍의 프로그래밍
[백준 14889] 스타트와 링크 본문
https://www.acmicpc.net/problem/14889
14889번: 스타트와 링크
예제 2의 경우에 (1, 3, 6), (2, 4, 5)로 팀을 나누면 되고, 예제 3의 경우에는 (1, 2, 4, 5), (3, 6, 7, 8)로 팀을 나누면 된다.
www.acmicpc.net
요구사항
1. 팀 시너지의 차가 최소가 되는 값 구하기
풀이
1. 2개의 팀으로 나눈다
2. 각 각의 합을 구한다
3. 합의 최소를 구한다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int n;
int map[21][21];
int visit[21];
int ans = 987654321;
void com(int arr[], int n, int r, int now, int pos) {
if (r == now) {
//계산
int tempsum1 = 0;
int tempsum0 = 0;
int tempans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (i == j)
continue;
if (visit[i] == 1 && visit[j] == 1) {
tempsum1 += map[i][j];
}
if (visit[i] == 0 && visit[j] == 0) {
tempsum0 += map[i][j];
}
}
}
tempans = abs(tempsum1 - tempsum0);
ans = min(tempans, ans);
return;
}
for (int i = pos; i < n; i++) {
if (visit[i] == 1) continue;
visit[i] = 1;
com(arr, n, r, now + 1, i);
visit[i] = 0;
}
}
int main() {
cin >> n;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cin >> map[i][j];
}
}
com(visit, n, n / 2, 0, 0);
cout << ans << endl;
}
'알고리즘 문제풀이 > 백준' 카테고리의 다른 글
[백준 16234] 인구 이동 (0) | 2020.02.08 |
---|---|
[백준 14890] 경사로 (0) | 2020.02.08 |
[백준 16235] 나무 재테크 (0) | 2020.02.08 |
[백준 17144] 미세먼지 안녕 (0) | 2020.02.04 |
[백준 17140] 이차원 배열과 연산 (0) | 2020.02.02 |
Comments