๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Algorithm ๐Ÿง‘๐Ÿป‍๐Ÿ’ป/๋ฐฑ์ค€(BOJ)

[๋ฐฑ์ค€,c++] 15661๋ฒˆ - ๋งํฌ์™€ ์Šคํƒ€ํŠธ

by ์•ˆ์ฃผํ˜• 2022. 9. 18.

๋ฌธ์ œ

 

15661๋ฒˆ: ๋งํฌ์™€ ์Šคํƒ€ํŠธ

์ฒซ์งธ ์ค„์— N(4 ≤ N ≤ 20)์ด ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์— S๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๊ฐ ์ค„์€ N๊ฐœ์˜ ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , i๋ฒˆ ์ค„์˜ j๋ฒˆ์งธ ์ˆ˜๋Š” Sij ์ด๋‹ค. Sii๋Š” ํ•ญ์ƒ 0์ด๊ณ , ๋‚˜๋จธ์ง€ Sij๋Š” 1๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™๊ณ , 100

www.acmicpc.net

 

์ฝ”๋“œ

#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์˜ ์ธ์›์ด ์žˆ์„ ๊ฒฝ์šฐ

  1. {A, {B, C, D, E}}, {B, {A, C, D, E}}.... {E, {A, B, C, D}}์˜ ๊ฒฝ์šฐ์ฒ˜๋Ÿผ ํ•˜๋‚˜๋ฅผ ๊ณ ๋ฅด๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์ „๋ถ€ ๊ฐ™์€ ํŒ€์œผ๋กœ ํŒ์ •ํ•˜๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
  2. {{A, B}, {C, D, E}}, {{A, C}, {B, D, E}}, {{A, D, {B, C, E}}... ์™€ ๊ฐ™์ด ๋‘ ๊ฐœ๋ฅผ ๊ณ ๋ฅด๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์ „๋ถ€ ๊ฐ™์€ ํŒ€์œผ๋กœ ํŒ์ •ํ•˜๋ฉด ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๋งŒ๋“ค์–ด์ง‘๋‹ˆ๋‹ค.
  3. {{A, B, C}, {D, E}}... ๊ฐ™์ด ์„ธ ๊ฐœ๋ฅผ ๊ณ ๋ฅด๋Š” ๊ฒฝ์šฐ ๋ฐ”๋กœ ์œ„์—์„œ ๋‘๊ฐœ๋ฅผ ๊ณ ๋ฅธ ๊ฒฝ์šฐ์™€ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ๊ตณ์ด ์ค‘๋ณตํ•ด์„œ ํŒ๋ณ„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ  ์ตœ๋Œ€ ์ด์ธ์›(N) / 2 ์˜ ๊ฐœ์ˆ˜๋งŒ ์„ ํƒํ•˜๋ฉด ํŒ€์ด ๋‚˜๋ˆ„์–ด์ง€๋Š” ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋”ฐ์ ธ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋Œ“๊ธ€