티스토리 뷰

https://www.acmicpc.net/problem/15661

 

15661번: 링크와 스타트

첫째 줄에 N(4 ≤ N ≤ 20)이 주어진다. 둘째 줄부터 N개의 줄에 S가 주어진다. 각 줄은 N개의 수로 이루어져 있고, i번 줄의 j번째 수는 Sij 이다. Sii는 항상 0이고, 나머지 Sij는 1보다 크거나 같고, 100

www.acmicpc.net

const fs = require('fs');
const input = fs.readFileSync("./dev/stdin").toString().trim().split("\n").map(v=>v.split(' ').map(Number));
const [N] = input[0]
const player = input.splice(1);
let answer = 1000;
for(let i = 0; i<(1<<N); i++){

  if(check(i)){
    let value = i
    const start = [];
    const link = [];
    
    // 팀나누고. 
    for(let j = 0; j<N; j++){
      if(value&1){
        start.push(j)
      }else{
        link.push(j)
      }
      value = value>>1
    }

    const specStart = getSpec(start)
    const specLink = getSpec(link)

    const specDiff = Math.abs(specLink-specStart)
    if(specDiff<answer) answer = specDiff
  }
}


console.log(answer)


function check(n){
  const target = Math.floor(N/2)
  let cnt = 0;
  while(n>0){
    if(n&1){
      cnt++;
    }
    n = n>>1;
  }
  if(cnt<=target)return true;
  return false;
}

function getSpec(arr){
  let spec = 0;
  for(let i = 0; i<arr.length; i++){
    const x = arr[i];
    for(let j= 0; j <arr.length; j++){
      if(i==j) continue;
      const y = arr[j]
      spec+=player[x][y]
    }
  }
  return spec
}
728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함