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

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

게으른 일꾼

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

요약
각 작업은 처리 시간과 도착 시각과 마감 시각을 가지며 작업자는 대기 중인 작업이 있으면 쉬지 않고 다음 작업을 골라 실제 수행한 시간의 합을 최소화합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 정렬
정답자
아직 제출이 없습니다

문제

게으른 일꾼이 한 명 있다. 그는 가능한 한 적게 일하고 싶어 하지만, 지금 처리할 수 있는 일이 하나라도 있는 동안에는 반드시 일을 하고 있어야 한다는 제약을 받는다.

작업 1,2,…,n1, 2, \dots, n 이 있고, 작업 ii 의 처리 시간은 tit_i 이다. 작업 ii 는 시각 aia_i 에 도착하고 마감 시각은 did_i 이며, tit_i, aia_i, did_i 는 모두 음이 아닌 정수이다. 각 작업은 엄격한 마감을 가진다. 즉 작업 ii 는 자신의 허용 구간 Ii=[ai,di]I_i = [a_i, d_i] 안에서만 실행할 수 있으며, aia_i 이후에 시작해서 did_i 까지 끝나야 한다.

일꾼은 한 번에 하나의 작업만 처리하고, 한 번 시작한 작업은 중간에 멈추지 않고 끝까지 처리한다. 어떤 작업을 끝냈을 때 처리할 수 있는 다른 작업이 있으면 즉시 그 작업을 시작해야 한다. 처리할 수 있는 작업이 없으면 일꾼은 쉬고, 처리할 수 있는 작업이 도착하는 즉시 그 작업을 시작한다.

모든 작업 ii 에 대해, 구간의 길이 di−aid_i - a_i 는 tit_i 이상이고 2ti2 t_i 미만임이 보장된다.

일꾼은 처리할 수 있는 여러 작업 중 어느 것을 먼저 할지 선택할 수 있고, 이 선택에 따라 어떤 작업들은 마감을 넘겨 실행되지 못할 수 있다. 일꾼이 실제로 일에 쓴 시간의 총합, 즉 실행한 작업들의 처리 시간의 합을 최소로 만들 때 그 최솟값을 구하는 프로그램을 작성하라.

입력

입력은 TT 개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 TT 가 주어진다.

각 테스트 케이스의 첫 줄에는 작업의 수 nn (0≤n≤1000 \le n \le 100) 이 주어진다. 이어지는 nn 개의 줄에는 각 작업의 처리 시간 tit_i, 도착 시각 aia_i, 마감 시각 did_i 가 세 정수로 주어진다. 모든 값은 1≤ti1 \le t_i, 0≤ai≤2500 \le a_i \le 250, 1≤di≤2501 \le d_i \le 250 을 만족하며, 각 작업은 ti≤di−ai<2tit_i \le d_i - a_i < 2 t_i 를 만족한다.

출력

각 테스트 케이스마다 정확히 한 줄을 출력한다. 그 줄에는 일꾼이 일에 쓴 시간 총합의 최솟값을 출력한다.

예제2

  1. 예제 1

    입력
    3
    3
    15 0 25
    50 0 90
    45 15 70
    3
    15 5 20
    15 25 40
    15 45 60
    5
    3 3 6
    3 6 10
    3 14 19
    6 7 16
    4 4 11
    
    예상 출력
    50
    45
    15
    
  2. 예제 2

    입력
    1
    1
    10 0 15
    
    예상 출력
    10