게으른 일꾼
시간 제한1초메모리 제한128 MB
각 작업은 처리 시간과 도착 시각과 마감 시각을 가지며 작업자는 대기 중인 작업이 있으면 쉬지 않고 다음 작업을 골라 실제 수행한 시간의 합을 최소화합니다.
문제
게으른 일꾼이 한 명 있다. 그는 가능한 한 적게 일하고 싶어 하지만, 지금 처리할 수 있는 일이 하나라도 있는 동안에는 반드시 일을 하고 있어야 한다는 제약을 받는다.
작업 이 있고, 작업 의 처리 시간은 이다. 작업 는 시각 에 도착하고 마감 시각은 이며, , , 는 모두 음이 아닌 정수이다. 각 작업은 엄격한 마감을 가진다. 즉 작업 는 자신의 허용 구간 안에서만 실행할 수 있으며, 이후에 시작해서 까지 끝나야 한다.
일꾼은 한 번에 하나의 작업만 처리하고, 한 번 시작한 작업은 중간에 멈추지 않고 끝까지 처리한다. 어떤 작업을 끝냈을 때 처리할 수 있는 다른 작업이 있으면 즉시 그 작업을 시작해야 한다. 처리할 수 있는 작업이 없으면 일꾼은 쉬고, 처리할 수 있는 작업이 도착하는 즉시 그 작업을 시작한다.
모든 작업 에 대해, 구간의 길이 는 이상이고 미만임이 보장된다.
일꾼은 처리할 수 있는 여러 작업 중 어느 것을 먼저 할지 선택할 수 있고, 이 선택에 따라 어떤 작업들은 마감을 넘겨 실행되지 못할 수 있다. 일꾼이 실제로 일에 쓴 시간의 총합, 즉 실행한 작업들의 처리 시간의 합을 최소로 만들 때 그 최솟값을 구하는 프로그램을 작성하라.
입력
입력은 개의 테스트 케이스로 이루어진다. 첫 줄에 테스트 케이스의 수 가 주어진다.
각 테스트 케이스의 첫 줄에는 작업의 수 () 이 주어진다. 이어지는 개의 줄에는 각 작업의 처리 시간 , 도착 시각 , 마감 시각 가 세 정수로 주어진다. 모든 값은 , , 을 만족하며, 각 작업은 를 만족한다.
출력
각 테스트 케이스마다 정확히 한 줄을 출력한다. 그 줄에는 일꾼이 일에 쓴 시간 총합의 최솟값을 출력한다.