아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

계주

시간 제한2초메모리 제한512 MB

요약
n개의 체크포인트를 크기 a_i인 연속한 그룹으로 나누고, 각 그룹을 0번 지점에서 출발해 임의 순서로 방문하고 돌아올 때 총 이동 시간의 최솟값을 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 비트 연산, 완전 탐색, 그래프
정답자
아직 제출이 없습니다

문제

매년 도시의 날을 기념해 남부 베를랸츠크에서 공개 계주가 열린다. 대회에는 kk명으로 구성된 팀이 참가하며, 계주 동안 팀원들은 nn개의 검문소를 방문해야 한다.

검문소에는 1부터 nn까지 번호가 붙어 있고, 출발 지점은 0번 지점으로 표시한다. 대회는 다음과 같이 진행된다. 팀의 첫 번째 주자가 0번 지점에서 출발해 아직 방문하지 않은 검문소 a1a_1개를 지나 0번 지점으로 돌아와 두 번째 주자에게 바통을 넘긴다. 그다음 두 번째 주자는 아직 방문하지 않은 검문소 a2a_2개를 지나 돌아와 다음 주자에게 바통을 넘긴다. 계주는 마지막 주자가 아직 방문하지 않은 검문소 aka_k개를 방문하고 출발 지점으로 돌아올 때까지 계속된다. 바통 전달은 즉시 이루어진다. 팀의 목표는 계주를 최대한 빠르게 완주하는 것이다.

남부 베를랸츠크 달리기 학교의 학생들은 대회를 미리 준비하기로 했다. 그들은 대회 계획을 입수해 aia_i 값을 알게 되었고, 각 지점 쌍에 대해 한 지점에서 다른 지점까지 달리는 데 걸리는 시간도 알아냈다. 팀의 모든 주자는 같은 속도로 이동하므로, 이 시간은 어느 주자가 그 구간을 달리든 같다.

팀이 계주를 최대한 빠르게 완주하는 경로를 짜도록 도와주자.

입력

첫째 줄에 두 정수 nn과 kk가 주어진다(1≤n≤181 \le n \le 18, 1≤k≤n1 \le k \le n). 이는 검문소의 수와 팀의 주자 수이다.

둘째 줄에 kk개의 정수 aia_i가 주어진다(1≤ai≤n1 \le a_i \le n, a1+a2+…+ak=na_1 + a_2 + \ldots + a_k = n). 이는 ii번째 주자가 달려야 하는 검문소의 수이다.

다음 n+1n+1개 줄에는 각각 n+1n+1개의 정수 bi,jb_{i,j}가 주어진다(1≤bi,j≤1061 \le b_{i, j} \le 10^6, bi,j=bj,ib_{i,j}=b_{j,i}, bi,i=0b_{i,i}=0). 이는 0부터 nn까지의 ii와 jj에 대해 ii번째 지점에서 jj번째 지점까지 달리는 데 걸리는 시간이다.

출력

한 줄에 팀이 계주를 완주하는 데 걸리는 최소 시간을 나타내는 정수 하나를 출력한다.

예제2

  1. 예제 1

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

    입력
    4 2
    2 2
    0 1 4 2 5
    1 0 2 6 6
    4 2 0 6 6
    2 6 6 0 2
    5 6 6 2 0
    
    예상 출력
    16