문제 분류 수업 진도 대회 채점현황 순위 질문게시판
게임
스도쿠 타이핑 리듬 타자게임 타이핑 테트리스 타이핑 인베이더 타이핑 지뢰찾기 8192 공룡게임 타이핑 플래피버드 랭킹
로그인

8027 : 가변 진법 허프만

•시간제한: 3.000 S •메모리제한: 256 MB •제출: 0 •통과: 0 •만든사람: suakii

8027 : 가변 진법 허프만

시간 3.000s · 메모리 256MB · 제출 0 · 정답 0

문제 설명

$N$개의 기호와 각 기호의 빈도수가 주어집니다. 우리는 $R$진법(Radix $R$) 허프만 코드를 구축하여 코드의 가중치 패스 길이(Weighted Path Length, 즉 각 기호의 빈도수와 코드 길이의 곱의 총합)를 최소화하고자 합니다.
최적의 $R$진 허프만 코드를 구축했을 때의 최소 가중치 패스 길이를 구하는 프로그램을 작성하십시오.

[제약 조건]
• $1 \le T \le 50$ (테스트 케이스 수)
• $1 \le N \le 1,000$
• $2 \le R \le 10$
• $1 \le f_i \le 10^9$ (각 기호의 빈도수)

입력 설명

첫째 줄에 테스트 케이스의 개수 $T$가 주어집니다.
각 테스트 케이스의 첫째 줄에는 기호의 개수 $N$과 진법 $R$이 공백으로 구분되어 주어집니다.
둘째 줄에는 $N$개의 정수로 각 기호의 빈도수 $f_1, f_2, \ldots, f_N$이 공백으로 구분되어 주어집니다.

출력 설명

각 테스트 케이스마다 최적 $R$진 허프만 코드의 최소 가중치 패스 길이를 한 줄에 하나씩 출력합니다.

입력 예시
COPY
복사되었습니다!

1
4 3
2 3 5 7

출력 예시
COPY
복사되었습니다!

22

도움

$R$진 허프만 코딩에서는 매 단계마다 우선순위 큐에서 가장 빈도수가 작은 $R$개의 노드를 꺼내 합칩니다.
단, 노드들이 매번 정확히 $R$개씩 묶여 최종적으로 1개가 남도록 하기 위해, $(N-1) \pmod{R-1} \neq 0$인 경우 빈도수가 0인 더미(Dummy) 노드를 $(R-1) - ((N-1) \pmod{R-1})$개 추가한 후 알고리즘을 진행해야 합니다.

출처/분류

NOTICE  —  BFStudy OJ 정보샘
애들아, 문제 많이 풀고 게임 잠깐 하는거지?
— 정보샘