마지막 수강신청

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

요약
최대 10개의 후보 과목의 학점과 강의 시간이 주어질 때, 겹치지 않는 부분집합으로 M학점 이상을 얻을 수 있는지 판정한다.
난이도

보통10점 중 4점

유형
백트래킹, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

도현이는 어느덧 졸업을 앞두고 마지막 학기 수강신청을 하고 있다. 도현이는 졸업하기 전 학교에서 마지막으로 수강하고 싶은 후보 과목 NN개를 정리했다. 각 과목은 다음과 같은 정보를 가지고 있다:

  • c_ic\_i: ii번째 과목을 수강하여 얻을 수 있는 학점을 나타낸다.
  • s_is\_i: 매주 ii번째 과목이 진행되는 강의 횟수를 나타낸다.
  • d_i,jd\_{i,j}: 매주 ii번째 과목의 jj번째 강의가 열리는 요일을 나타낸다.
  • h_i,jh\_{i,j}: 매주 ii번째 과목의 jj번째 강의가 열리는 시각을 나타낸다. 강의는 h_i,jh\_{i,j}시 정각에 시작해서 h_i,jh\_{i,j}시 5959분에 종료된다.

도현이는 이 강의들의 일부만으로 시간표를 구성했을 때, 졸업 요건인 MM학점을 수강할 수 있는지 알고 싶다. 수강하고자 하는 과목들 간 시간이 겹치지 않아야 하며, 이동시간 등은 고려하지 않는다.

입력

첫 번째 줄에 수강하고 싶은 후보 과목의 개수 NN, 졸업을 위해 수강해야 하는 최소 학점 MM이 공백으로 구분되어 주어진다. (1≤N≤10;(1 \leq N \leq 10; 1≤M≤24)1\leq M \leq 24)

두 번째 줄부터 NN줄에 걸쳐 각각 후보 과목에 대한 정보가 주어진다. 각 줄에 c_ic\_i, s_is\_i, d_i,1,h_i,1,...,d_i,s_i,h_i,s_id\_{i,1},h\_{i,1}, ..., d\_{i,s\_i},h\_{i,s\_i} 가 공백으로 구분되어 주어진다. (1≤c_i≤4;(1\leq c\_i \leq4; 1≤s_i≤3;1\leq s\_i \leq 3; 0≤h_i,j≤23;0 \leq h\_{i,j} \leq 23; d_i,jd\_{i,j} 는 MON, TUE, WED, THU, FRI중 하나의 값을 가진다.))

같은 과목의 강의 시간들은 오름차순으로 주어지며, 서로 다른 강의 시간이 겹치는 입력은 주어지지 않는다.

출력

후보 과목으로 시간표를 구성하여 MM학점 이상 수강할 수 있다면 YES, 아니라면 NO를 출력한다.

힌트

요일의 순서는 MON << TUE << WED << THU << FRI로 정의되며, 각각 순서대로 월요일부터 금요일까지를 나타낸다.

예제2

  1. 예제 1

    입력
    3 6
    3 2 MON 14 FRI 12
    3 1 MON 14
    2 2 TUE 16 FRI 12
    
    예상 출력
    NO
    
  2. 예제 2

    입력
    3 6
    3 2 MON 14 FRI 12
    2 1 MON 14
    3 2 TUE 16 FRI 13
    
    예상 출력
    YES