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

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

강의실 배치는 가능하다

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

요약
매일 같은 시간에 열리는 강좌마다 필요한 병렬 강의실 수를 채우고 청소가 끝난 뒤에만 같은 강의실에서 다음 강좌를 열 수 있을 때 최소 강의실 수를 구합니다.
난이도

보통10점 중 7점

유형
그래프, 구간, 수학
정답자
아직 제출이 없습니다

문제

매년 여러 대학이 전국 규모의 프로그래밍 대회를 연다. 다카에서도 매년 ICPC 지역 대회가 열리고, 여기서 한두 팀이 ICPC 월드 파이널에 나간다.

이 대회를 지켜본 MMR(Mission Maker Rahman)은 프로그래밍 학교를 열기로 했다. 학교에서는 코스 NN개를 가르치고, 모든 코스는 매일 열린다. 계산 기하를 배우는 동안 다이나믹 프로그래밍을 잊어버리면 안 되기 때문이다. 코스 ii는 시각 AiA_i에 시작해서 시각 BiB_i에 끝나고, 양쪽 끝 시각도 수업 시간에 들어간다. 코스 ii의 수강생은 SiS_i명이고, 두 코스를 같이 듣는 학생은 없다.

MMR은 Sentinel Tower라는 건물의 방 몇 개를 빌려 학교를 운영하려 한다. 방 하나에는 학생이 최대 MM명까지 들어간다. 그래서 코스 ii는 같은 시간에 방 ⌈Si/M⌉\lceil S_i / M \rceil개를 쓰고, 각 방에서 같은 수업을 따로 진행한다.

프로그래머는 잠시도 가만히 있지 못하고 뒷정리에도 관심이 없다. 그래서 어떤 방에서 코스 ii 수업이 끝나면, 같은 방에서 코스 jj 수업을 시작하기 전에 청소하는 데 cleanij\text{clean}_{ij}만큼의 시간이 걸린다. 정리하면 같은 방에서 코스 ii 바로 다음에 코스 jj를 진행할 수 있는 조건은 Bi+cleanij<AjB_i + \text{clean}_{ij} < A_j이다.

모든 코스가 매일 같은 시각에 반복되므로 하루 일정만 계획하면 된다. MMR이 빌려야 하는 방의 최소 개수를 구하자.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (T≤100T \le 100)

각 테스트 케이스의 첫째 줄에는 코스의 개수 NN과 방 하나의 정원 MM이 주어진다. (1≤N≤1001 \le N \le 100, 1≤M≤100001 \le M \le 10000)

다음 NN개 줄에는 코스 ii의 시작 시각 AiA_i, 종료 시각 BiB_i, 수강생 수 SiS_i가 주어진다. (0≤Ai≤Bi≤1070 \le A_i \le B_i \le 10^7, 1≤Si≤100001 \le S_i \le 10000)

그다음 NN개 줄에는 청소 시간 행렬이 주어진다. ii번째 줄의 jj번째 정수가 cleanij\text{clean}_{ij}이다. (0≤cleanij≤1070 \le \text{clean}_{ij} \le 10^7, cleanii=0\text{clean}_{ii} = 0)

출력

각 테스트 케이스마다 Case x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 빌려야 하는 방의 최소 개수이다.

예제1

  1. 예제 1

    입력
    3
    1 5
    1 60 12
    0
    4 1
    1 100 10
    50 130 3
    150 200 15
    80 170 7
    0 2 3 4
    5 0 7 8
    9 10 0 12
    13 14 15 0
    2 1
    1 10 1
    12 20 1
    0 2
    5 0
    
    예상 출력
    Case 1: 3
    Case 2: 22
    Case 3: 2