Algorithm π§π»π»/λ°±μ€(BOJ)
[λ°±μ€,c++] 14889λ² - μ€ννΈμ λ§ν¬
dkswnkk
2021. 11. 14. 23:28
λ¬Έμ
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;
}