λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
Algorithm πŸ§‘πŸ»‍πŸ’»/λ°±μ€€(BOJ)

[λ°±μ€€,c++] 14889번 - μŠ€νƒ€νŠΈμ™€ 링크

by dkswnkk 2021. 11. 14.

문제

 

14889번: μŠ€νƒ€νŠΈμ™€ 링크

예제 2의 κ²½μš°μ— (1, 3, 6), (2, 4, 5)둜 νŒ€μ„ λ‚˜λˆ„λ©΄ 되고, 예제 3의 κ²½μš°μ—λŠ” (1, 2, 4, 5), (3, 6, 7, 8)둜 νŒ€μ„ λ‚˜λˆ„λ©΄ λœλ‹€.

www.acmicpc.net

 

μ½”λ“œ

#include <iostream>
#include <vector>

using namespace std;

int map[101][101];

int main(){
    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int N; cin>>N;
    for(int i=0; i<N; i++){
        for(int k=0; k<N; k++){
            cin>>map[i][k];
        }
    }

    int ans=9999;

    for(int i=0; i<(1<<N); i++){    //000000~111111(λͺ¨λ‘ 0λ²ˆνŒ€μ— μ†ν•˜λŠ” κ²½μš°λΆ€ν„° λͺ¨λ‘ 1λ²ˆνŒ€μ— μ†ν•˜λŠ” κ²½μš°κΉŒμ§€)
        vector<int>first,second;
        for(int k=0; k<N; k++){
            if(i&(1<<k)) first.push_back(k);    // i번째 집합에 kκ°€ ν¬ν•¨λ˜μ–΄ 있으면, 1λ²ˆνŒ€
            else second.push_back(k);           // ν¬ν•¨λ˜μ–΄ μžˆμ§€ μ•Šλ‹€λ©΄, 2λ²ˆνŒ€
        }

        if(first.size()!=N/2) continue;  //νŒ€μ΄ λ°˜λ°˜μ”© μ•ˆ λ‚˜λ‰˜μ–΄ μ‘Œμ„λ•Œ 진행x
        int scoreA=0,scoreB=0;
        for(int a=0; a<first.size(); a++){
            for(int b=0; b<second.size(); b++){
                if(a==b) continue;
                scoreA+=map[first[a]][first[b]];
                scoreB+=map[second[b]][second[a]];
            }
        }
        ans=min(ans,abs(scoreA-scoreB));
    }
    cout<<ans;
}

λŒ“κΈ€