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

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

직사각형 안의 직사각형

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

요약
큰 직사각형의 왼쪽 또는 오른쪽 변에 붙은 작은 직사각형들 중에서 서로 겹치지 않게 부분집합을 골라 가중치 합의 최댓값을 구한다.
난이도

어려움10점 중 8점

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

문제

Bobo에게는 왼쪽 아래 꼭짓점이 (0,0)(0, 0)이고 오른쪽 위 꼭짓점이 (w,106)(w, 10^6)인 큰 직사각형이 있다. 또한 큰 직사각형 안에 축에 평행한 작은 직사각형 nn개가 있다. ii번째 직사각형의 가중치는 v_iv\_i이다. 각 직사각형은 왼쪽 변 또는 오른쪽 변 중 하나만(둘 다는 아님) 큰 직사각형의 왼쪽 변이나 오른쪽 변과 일치한다.

Bobo는 작은 직사각형의 부분집합을 고르려고 한다. 이때 직사각형들은 서로 닿을 수는 있지만 겹치면 안 된다. 즉, 둘 이상의 직사각형 내부에 속하는 점이 있어서는 안 된다. Bobo는 가능한 모든 경우 중에서 가중치 합이 최대가 되는 경우를 원한다.

입력

입력은 0개 이상의 테스트 케이스로 이루어지며, 파일의 끝에서 종료된다. 각 테스트 케이스는 다음과 같다.

첫째 줄에는 정수 nn과 ww가 주어진다. (1≤n≤20001 \leq n \leq 2000, 2≤w≤1062 \leq w \leq 10^6) nn은 작은 직사각형의 개수이고 ww는 큰 직사각형의 너비이다.

다음 nn개 줄 중 ii번째 줄에는 정수 다섯 개 type_i\mathit{type}\_i, l_il\_i, a_ia\_i, b_ib\_i, v_iv\_i가 주어진다. (type_i∈{0,1}\mathit{type}\_i \in \{0, 1\}, 0≤a_i<b_i≤1060 \leq a\_i < b\_i \leq 10^6, 1≤l_i<w1 \leq l\_i < w, 0≤v_i≤1060 \leq v\_i \leq 10^6) 여기서 v_iv\_i는 ii번째 직사각형의 가중치이다. type_i=0\mathit{type}\_i = 0이면 ii번째 직사각형의 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점이 각각 (0,a_i)(0, a\_i)와 (l_i,b_i)(l\_i, b\_i)이고, type_i=1\mathit{type}\_i = 1이면 왼쪽 아래 꼭짓점과 오른쪽 위 꼭짓점이 각각 (w−l_i,a_i)(w - l\_i, a\_i)와 (w,b_i)(w, b\_i)이다.

모든 1≤i<j≤n1 \leq i < j \leq n에 대해 a_i≠a_ja\_i \ne a\_j, a_i≠b_ja\_i \ne b\_j, b_i≠a_jb\_i \ne a\_j, b_i≠b_jb\_i \ne b\_j임이 보장된다. 또한 모든 nn의 합은 20002000을 넘지 않는다.

출력

각 테스트 케이스마다 가중치 합의 최댓값을 나타내는 정수를 한 줄에 출력한다.

힌트

세 번째 테스트에서 Bobo는 3번째, 4번째, 5번째 직사각형을 고를 수 있다.

예제1

  1. 예제 1

    입력
    3 10
    0 3 1 6 12
    0 3 3 4 100
    1 9 2 5 11
    3 10
    0 3 1 6 12
    0 1 3 4 5
    1 9 2 5 11
    6 5
    1 1 17 32 4
    0 3 1 18 7
    1 3 4 8 12
    1 2 15 20 14
    1 1 30 33 16
    1 4 2 16 13
    
    예상 출력
    100
    16
    42