그냥 하는 노트와 메모장

BOJ 4384 공평하게 팀 나누기 본문

Solved problems

BOJ 4384 공평하게 팀 나누기

coloredrabbit 2020. 5. 26. 21:04

* BOJ 4384 공평하게 팀 나누기

[분류 : 다이나믹 프로그래밍]


[풀이]

  N/2명을 배치하면 나머지 N/2+N%2명은 자동으로 배정된다. 따라서 N/2명이 가능한 점수를 모두 구한 뒤 이를 전체 총합에서 뺀 값과의 차이를 최소화하면 되시겠다.


  동전 교환 문제처럼 생각해보자.

  i번째 사람을 추가하면서 1~N/2명팀을 구성할 때의 값을 구한다. N/2명의 점수 총합의 최대값은 최대 인원수 / 2 * 인원당 최대 점수로 계산 가능하다. 

  계산해보면 알겠지만, 수 자체가 배열에 담기에 충분히 작기 때문에, i번째 사람을 추가할 때 i-1번째 사람까지 1~N/2명을 팀을 이루도록 했을 때의 "가능한 모든 점수"에서 추가하는 방식으로 진행하면 된다.

이렇게 N번째 사람까지 N/2명으로 구성했을 때의 가능한 점수를 가지고 반대편 팀을 구한 뒤 여기서의 최소값을 구해주면 된다.

※ 주의해야할 점은 인원수를 오름차순으로 방문하면 데이터가 오염될 수 있기 때문에 인원수를 내림차순으로 방문해야 한다.



'Solved problems' 카테고리의 다른 글

BOJ 2543 초고속철도  (0) 2020.05.28
BOJ 2888 상범 게임  (0) 2020.05.28
BOJ 1410 패턴의 개수  (0) 2020.05.25
BOJ 1742 레이싱 결과  (0) 2020.05.25
BOJ 1040 정수  (0) 2020.05.24
Comments