생존자 (Large)

상하기 전에 먹어야 하고 먹은 음식의 포만 시간이 지나면 다음 음식을 먹어야 할 때 생존 시간이 가장 길어지는 순서를 구합니다.

보통7동적 계획법그리디정렬아직 제출이 없습니다시간 제한10초메모리 제한512 MB

문제

당신은 무인도에 조난당했다. 음식이 든 상자 하나는 챙겼지만, 풀 한 포기 없는 돌섬이고 낚시할 방법도 없어서 음식을 더 구할 수는 없다.

상자를 확인해 보니 음식은 모두 NN개다. 각 음식 ii에는 남은 유통기한 PiP_i와 그 음식을 먹으면 허기를 참을 수 있는 시간 SiS_i가 적혀 있다. 두 값의 단위는 모두 분이다.

음식을 먹는 규칙은 다음과 같다.

  • 지금, 즉 0분부터 음식을 먹기 시작한다.
  • 유통기한이 지난 음식은 즉시 폐기한다. 현재 시각이 tt분이면 PitP_i \ge t인 음식만 먹을 수 있다. 남은 유통기한이 0인 음식은 지금 당장 먹지 않으면 폐기해야 한다.
  • 음식 iitt분에 먹으면 t+Sit + S_i분이 될 때까지 다른 것은 아무것도 먹지 않는다.
  • t+Sit + S_i분이 되는 순간 다른 음식을 먹지 못하면 곧바로 굶어 죽는다.

무인도에서 버틸 수 있는 최대 시간을 구하라.

입력

첫 줄에 테스트 케이스의 개수 TT가 주어진다. 각 테스트 케이스는 다음 형식이다.

첫 줄에 음식의 개수 NN이 주어진다. 이어지는 NN개의 줄에는 각각 음식 하나의 남은 유통기한 PiP_i와 허기를 참을 수 있는 시간 SiS_i가 공백을 두고 주어진다.

제약조건

  • 모든 입력은 정수다.
  • 1T1001 \le T \le 100
  • 1N10001 \le N \le 1000
  • 0Pi1000000 \le P_i \le 100000
  • 1Si10001 \le S_i \le 1000

출력

각 테스트 케이스 xx마다 무인도에서 버틸 수 있는 최대 시간 yyCase #x: y 형식으로 한 줄에 출력한다.