μκ³ λ¦¬μ¦
λ°±μ€_14889_μ€ννΈμ λ§ν¬(λΈλ£¨νΈν¬μ€-μμ΄)
shj718
2022. 5. 10. 16:45
πΏλ¬Έμ : 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
πΏμκ³ λ¦¬μ¦: λΈλ£¨νΈν¬μ€ - μμ΄ (μ΄ λ¬Έμ λ μ¬κ·, λΉνΈλ§μ€ν¬λ‘ νμ΄λ³Έ μ μ΄ μλλ° μμ΄λ‘λ ν μ μλ€.)
πμμ΄λμ΄: 벑ν°μ μΈλ±μ€κ° κ° μ μλ€μ λνλΈλ€κ³ ν λ, team1μ΄λ©΄ 0, team2μ΄λ©΄ 1μ κ°μΌλ‘ κ°μ§κ² νλ€.
Nλͺ μ μ μλ€μ λν΄, κΈΈμ΄κ° NμΈ μμ΄ 000···111 λΆν° μμν΄μ λ€μ μμ΄μ ꡬν΄κ°λ©° λ₯λ ₯μΉλ₯Ό κ³μ°νλ€.
πΏμ½λ:
#include <iostream>
#include <vector>
#include <algorithm>
#include <climits>
using namespace std;
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int N;
cin >> N;
vector<vector<int>> a(N, vector<int>(N)); // 2μ°¨μ λ²‘ν° μ΄κΈ°ν
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
cin >> a[i][j];
}
}
vector<int> players(N, 0); // κ° μ μμ νμ νμνλ 벑ν°
for (int i = 0; i < N / 2; i++) {
players[i] = 1;
}
sort(players.begin(), players.end());
int ans = INT_MAX;
do {
vector<int> team1;
vector<int> team2;
for (int i = 0; i < N; i++) {
if (players[i] == 0) {
team1.push_back(i);
}
else {
team2.push_back(i);
}
}
// λ₯λ ₯μΉ κ³μ°
int tmp1 = 0;
int tmp2 = 0;
for (int i = 0; i < N / 2; i++) {
for (int j = 0; j < N / 2; j++) {
if (j == i) continue;
tmp1 += a[team1[i]][team1[j]];
tmp2 += a[team2[i]][team2[j]];
}
}
int diff = (tmp1 > tmp2) ? tmp1 - tmp2 : tmp2 - tmp1;
if (diff < ans) {
ans = diff;
}
} while (next_permutation(players.begin(), players.end()));
cout << ans << '\n';
return 0;
}