๋ฌธ์
์ฝ๋
#include <iostream>
using namespace std;
int map[21][21];
int N;
int min_ability = 1e9;
bool flag[21];
int score(){
int start_score = 0;
int link_score = 0;
for(int i=1; i<=N; i++){
for(int k=1; k<=N; k++){
if(flag[i] && flag[k]){
start_score += map[i][k];
}
if(!flag[i] && !flag[k]){
link_score += map[i][k];
}
}
}
return abs(start_score - link_score);
}
void backtracking(int idx, int pick_cnt){
if(pick_cnt >= 1 && pick_cnt <= N/2){
min_ability = min(min_ability, score());
}
for(int i=idx; i<=N; i++){
flag[i] = 1;
backtracking(i + 1, pick_cnt + 1);
flag[i] = 0;
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N;
for(int i=1; i<=N; i++){
for(int k=1; k<=N; k++){
cin>>map[i][k];
}
}
backtracking(1, 0);
cout<<min_ability;
}
ํ์ด
์์ ํ์ ๋ฌธ์ ์ ๋๋ค.
๊ฐ๊ฐ์ ํ์ด ๋ง๋ค์ด์ง๋ ์กฐํฉ์ ๋ฐฑํธ๋ํน์ ์ด์ฉํ์ฌ ์์ฑํ์ฌ ๊ฐ๊ฐ์ ํ์ ํด๋นํ๋ ์ค์ฝ์ด๋ฅผ ๊ณ์ฐํด์ ์ฐจ์ด์ ์ต์๊ฐ์ ์ฐพ์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
๊ฐ๊ฐ์ ํ์ด ๋ง๋ค์ด์ง๋ ๊ณผ์ ์ ์ ์ดํด๋ณด๋ฉด ์ต๋ ์ด์ธ์(N) / 2 ์ ๊ฐ์๋ง ์ ํํ๋ฉด ํ์ ๋๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
A, B, C, D, E์ ์ธ์์ด ์์ ๊ฒฝ์ฐ
- {A, {B, C, D, E}}, {B, {A, C, D, E}}.... {E, {A, B, C, D}}์ ๊ฒฝ์ฐ์ฒ๋ผ ํ๋๋ฅผ ๊ณ ๋ฅด๊ณ ๋๋จธ์ง๋ฅผ ์ ๋ถ ๊ฐ์ ํ์ผ๋ก ํ์ ํ๋ฉด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๋ค์ด์ง๋๋ค.
- {{A, B}, {C, D, E}}, {{A, C}, {B, D, E}}, {{A, D, {B, C, E}}... ์ ๊ฐ์ด ๋ ๊ฐ๋ฅผ ๊ณ ๋ฅด๊ณ ๋๋จธ์ง๋ฅผ ์ ๋ถ ๊ฐ์ ํ์ผ๋ก ํ์ ํ๋ฉด ๊ฒฝ์ฐ์ ์๊ฐ ๋ง๋ค์ด์ง๋๋ค.
- {{A, B, C}, {D, E}}... ๊ฐ์ด ์ธ ๊ฐ๋ฅผ ๊ณ ๋ฅด๋ ๊ฒฝ์ฐ ๋ฐ๋ก ์์์ ๋๊ฐ๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์ฐ์ ๊ฒฝ์ฐ์ ์๊ฐ ๊ฐ๊ธฐ ๋๋ฌธ์ ๊ตณ์ด ์ค๋ณตํด์ ํ๋ณํ์ง ์์๋ ๋ฉ๋๋ค.
๋ฐ๋ผ์ ์ต๋ ์ด์ธ์(N) / 2 ์ ๊ฐ์๋ง ์ ํํ๋ฉด ํ์ด ๋๋์ด์ง๋ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ๋ฐ์ ธ๋ณผ ์ ์์ต๋๋ค.
'Algorithm ๐ง๐ปโ๐ป > ๋ฐฑ์ค(BOJ)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค,c++] 22860๋ฒ - ํด๋ ์ ๋ฆฌ (small) (0) | 2022.09.21 |
---|---|
[๋ฐฑ์ค,c++] 14500๋ฒ - ํ ํธ๋ก๋ฏธ๋ ธ (0) | 2022.09.18 |
[๋ฐฑ์ค,c++] 21278๋ฒ - ํธ์์ด ๋ ๋ง๋ฆฌ ์นํจ (0) | 2022.09.18 |
[๋ฐฑ์ค,c++] 6987๋ฒ - ์๋์ปต (0) | 2022.09.18 |
[๋ฐฑ์ค,c++] 21608๋ฒ - ์์ด ์ด๋ฑํ๊ต (0) | 2022.09.18 |
[๋ฐฑ์ค,c++] 22856๋ฒ - ํธ๋ฆฌ ์ํ (0) | 2022.09.18 |
๋๊ธ