최소 비용 접두사 자유 언어

시간 제한1초메모리 제한128 MB

요약
문자 비용이 주어진 d개 문자로 정확히 n개 단어의 접두사 없는 집합을 만들 때 최소 총비용을 구한다. 여러 테스트 케이스가 0 0으로 끝난다.
난이도

어려움10점 중 8점

유형
동적 계획법, 그리디, 트리, 조합론
정답자
아직 제출이 없습니다

문제

dd개의 문자 c1,c2,…,cdc_1, c_2, \ldots, c_d로 이루어진 알파벳을 사용하여 nn개의 단어로 된 언어를 만들려고 합니다. 이 언어는 접두사 자유(prefix-free)여야 합니다. 즉, 어떤 단어 ss가 다른 단어 tt의 접두사가 되는 단어 쌍 (s,t)(s, t)가 존재하지 않아야 합니다.

각 문자 cic_i에는 사용 비용 wiw_i가 있습니다. 한 단어의 비용은 그 단어를 이루는 문자들의 비용을 모두 더한 값입니다. 예를 들어 c1=ac_1 = a, c2=bc_2 = b, w1=1w_1 = 1, w2=10w_2 = 10일 때 단어 aba의 비용은 1+10+1=121 + 10 + 1 = 12입니다.

한 언어의 비용은 그 언어에 속한 모든 단어의 비용을 더한 값입니다. 예를 들어 언어 ab, bbb, baaa의 비용은 11+30+13=5411 + 30 + 13 = 54입니다.

정확히 nn개의 단어를 갖는 접두사 자유 언어 중에서 가능한 최소 총비용을 구하세요.

n=1n = 1인 경우, 유일한 단어로 비용이 00인 빈 단어를 사용할 수 있습니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다. 각 테스트 케이스의 첫 줄에는 두 정수 nn과 dd가 주어집니다 (1≤n≤2001 \le n \le 200, 1≤d≤2001 \le d \le 200). 다음 줄에는 dd개의 음이 아닌 정수 w1,w2,…,wdw_1, w_2, \ldots, w_d가 주어집니다. 입력은 두 개의 0으로 이루어진 줄로 끝나며, 이 줄은 테스트 케이스가 아닙니다.

출력

각 테스트 케이스마다, 주어진 dd개의 문자로 만든 nn개 단어의 접두사 자유 언어가 가질 수 있는 최소 비용을 한 줄에 출력하세요.

예제3

  1. 예제 1

    입력
    3 4
    1 10 100 1000
    0 0
    
    예상 출력
    23
    
  2. 예제 2

    입력
    1 5
    7 3 9 2 6
    0 0
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3 2
    1 5
    0 0
    
    예상 출력
    13