배달비가 너무 비싸서 만든 문제

시간 제한3초메모리 제한1024 MB

요약
N명의 학생을 M개의 가게에 배정하되 각자 한계 이하만 부담하고, 배달비 총합이 최소가 되도록 한다. 불가능하면 -1을 출력한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 그리디, 정렬
정답자
아직 제출이 없습니다

문제

한국과학영재학교 학생들은 주말마다 배달 음식을 시켜 먹곤 한다. 그런데 요즘 배달비가 너무 비싸져서 같이 시키는 학생들이 점점 많아지고 있다.

총 NN명의 학생들이 각자 MM개의 가게 중 정확히 한 가게를 선택해서 주문하는데, 같은 가게를 선택한 학생들끼리는 함께 주문하면 배달비를 균등하게 나눠서 낼 수 있다. jj번째 가게에서 음식을 주문한다면 총 c_jc\_j의 배달비가 발생하는데, 그 가게에서 주문한 학생들이 배달비를 균등하게 나눠서 내게 된다. 각자가 낼 배달비가 꼭 정수일 필요는 없다. ii번째 학생은 jj번째 가게에서 주문할 때 자신이 내야 할 배달비가 r_i,jr\_{i,j} 이하일 때 jj번째 가게에서 음식을 주문할 수 있다.

도영이는 모든 학생이 내는 배달비의 총합을 최소화하게끔 각 학생이 어느 가게에서 음식을 주문할지를 결정하려고 한다. 학생들이 내야 할 배달비 총합의 최솟값을 구해 주자.

입력

첫 번째 줄에 두 정수 NN과 MM이 공백을 사이에 두고 주어진다.

두 번째 줄에 MM개의 정수 c_1,c_2,⋯ ,c_Mc\_1, c\_2, \cdots, c\_M이 공백을 사이에 두고 주어진다.

다음 NN개의 줄에 r_i,jr\_{i,j}가 주어지며, 그 중 ii번째 줄에 MM개의 정수 r_i,1,r_i,2,⋯ ,r_i,Mr\_{i,1}, r\_{i,2}, \cdots, r\_{i,M}이 공백을 사이에 두고 주어진다.

출력

배달비의 총합의 최솟값을 출력한다. 모든 학생이 빠짐없이 배달 음식을 주문하는 것이 불가능하다면 대신 -1을 출력한다.

제한

  • 1≤N≤151 \leq N \leq 15
  • 1≤M≤10001 \leq M \leq 1000
  • 1≤c_j≤1071 \leq c\_j \leq 10^7
  • 0≤r_i,j≤1070 \leq r\_{i,j} \leq 10^7

예제3

  1. 예제 1

    입력
    3 3
    3 2 10
    2 0 4
    2 0 4
    0 2 4
    
    예상 출력
    5
    
  2. 예제 2

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

    입력
    4 2
    8 8
    3 2
    3 2
    3 1
    0 2
    
    예상 출력
    -1