만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

포페알라

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

요약
T개의 가중치 있는 테스트 케이스를 정확히 K개의 연속된 부분과제로 나눌 때 얻는 최소 총점을 K가 1부터 S일 때까지 각각 구한다.
난이도

어려움10점 중 8점

유형
동적 계획법, 누적 합, 분할 정복
정답자
아직 제출이 없습니다

문제

루마니아어 낱말 popeală는 역사 소설 "Alexandru Lăpușneanul"에서 왔다. 이 낱말은 최근 루마니아 프로그래밍 대회에서 다시 쓰이기 시작했고, 채점 위원회가 별난 방식으로, 대개는 의도치 않게 참가자를 힘들게 만드는 상황을 가리킨다. 지나치게 빡빡한 시간 제한, 망가진 테스트 데이터, 잘못 쓴 문제 설명, 키보드 빼앗기 같은 것이 여기에 해당한다. 이 문제도 그런 상황을 다룬다.

참가자가 NN명인 대회가 있다. 문제는 하나뿐이고, 그 문제의 테스트 케이스는 TT개다. 위원회는 이 테스트 케이스를 서브태스크로 묶으려고 한다.

서브태스크 규칙은 다음과 같다. 각 테스트 케이스는 정확히 하나의 서브태스크에 속한다. 서브태스크 하나에 들어가는 테스트 케이스의 개수에는 제한이 없지만, 빈 서브태스크는 만들 수 없다. 어떤 참가자가 한 서브태스크의 테스트 케이스 중 하나라도 틀리면 그 참가자가 그 서브태스크에서 받는 점수는 00이다. 하나도 틀리지 않으면 그 서브태스크에 속한 테스트 케이스의 배점을 모두 더한 점수를 받는다.

위원회는 대회가 끝난 뒤에 이 묶기를 한다. 누가 어떤 테스트 케이스를 맞혔는지 이미 알고 있으므로, 대회 전체에서 참가자들이 받는 점수의 합이 최소가 되도록 묶을 생각이다.

길이가 TT인 배열 Points\mathrm{Points}가 주어진다. Points[i]\mathrm{Points}[i]는 ii번째 테스트 케이스의 배점이다. 크기가 N×TN \times T인 행렬 Results\mathrm{Results}도 주어진다. ii번째 참가자가 jj번째 테스트 케이스를 맞혔으면 Results[i][j]\mathrm{Results}[i][j]가 11, 아니면 00이다. 위원회는 서브태스크마다 번호가 연속인 테스트 케이스만 담기로 이미 정했다. 즉 테스트 케이스 XX와 YY가 같은 서브태스크에 있으면, X≤Z≤YX \le Z \le Y인 모든 테스트 케이스 ZZ도 같은 서브태스크에 있다.

1≤K≤S1 \le K \le S인 각 KK에 대해, 테스트 케이스를 정확히 KK개의 서브태스크로 묶을 때 대회 전체 점수 합의 최솟값을 구하라.

입력

첫째 줄에 세 정수 NN, TT, SS가 공백으로 구분되어 주어진다.

둘째 줄에 TT개의 정수가 공백으로 구분되어 주어진다. ii번째 수가 Points[i]\mathrm{Points}[i]다.

다음 NN개의 줄에 00과 11로 이루어진 길이 TT의 문자열이 한 줄에 하나씩 주어진다. ii번째 줄의 jj번째 문자가 Results[i][j]\mathrm{Results}[i][j]다.

  • 1≤T≤200001 \le T \le 20000
  • 1≤N≤501 \le N \le 50
  • 1≤S≤min⁡(50,T)1 \le S \le \min(50, T)
  • 1≤Points[i]≤100001 \le \mathrm{Points}[i] \le 10000 (1≤i≤T1 \le i \le T)
  • (Points[1]+Points[2]+⋯+Points[T])×N≤2×109(\mathrm{Points}[1] + \mathrm{Points}[2] + \dots + \mathrm{Points}[T]) \times N \le 2 \times 10^9

출력

SS개의 줄을 출력한다. ii번째 줄에는 테스트 케이스를 정확히 ii개의 서브태스크로 묶을 때 대회 전체에서 나올 수 있는 점수 합의 최솟값을 출력한다.

힌트

첫 번째 예제에서는 참가자가 22명, 테스트 케이스가 33개, S=3S = 3이다. 따라서 서브태스크가 11개, 22개, 33개일 때의 최솟값을 차례로 구해야 한다. 배점은 44, 33, 55다.

서브태스크가 하나면 테스트 케이스 세 개가 모두 같은 서브태스크에 들어간다. 두 참가자 모두 하나씩 틀렸으므로 점수 합은 00이다.

서브태스크가 둘이면 묶는 방법이 두 가지다. 한쪽은 점수 합이 1212, 다른 쪽은 88이므로 작은 쪽인 88을 고른다.

서브태스크가 셋이면 묶는 방법이 하나뿐이고, 이때 점수 합은 1616이다.

예제2

  1. 예제 1

    입력
    2 3 3
    4 3 5
    101
    110
    
    예상 출력
    0
    8
    16
    
  2. 예제 2

    입력
    1 4 2
    1 2 3 4
    1101
    
    예상 출력
    0
    1