만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

북엔드

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

요약
너비 M의 선반에 받침대 밑면 길이가 L인 받침대를 놓아, 순서대로 꽂힌 책 N권의 양쪽에 모두 받침대가 닿도록 하는 최소 개수를 구합니다. 불가능하면 -1을 출력합니다.
난이도

보통10점 중 5점

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

문제

최근 투자 실패로 전세 자금을 잃은 준엽이는 여자친구와 방을 합치기로 했다. 부푼 마음으로 이사를 하던 준엽이는 책장 앞에서 여자친구와 대립 중이다. 문제는 여자친구가 책을 깔끔하지 않게 꽂는 습관이다. 강박증이 심한 준엽이는 책장의 책이 비스듬히 세워지거나 옆으로 넘어지는 것을 원하지 않는다.

준엽이가 좋아하지 않는 책장 상태

준엽이는 ㄱ자 모양 북엔드를 몇 개 구매해서 책들이 넘어지지 않게 고정하고 싶다. 준엽이는 책들의 위치와 배열에 상관없이, 어떤 책도 넘어지지 않고 양면이 지탱되는 상태를 좋아한다. 당연히 준엽이는 책들의 순서가 바뀌는 것을 싫어한다. 즉, 준엽이가 가져온 책들의 순서가 그대로 유지되어야 한다.

북엔드 실물과 준엽이가 좋아하는 책장 상태

신나는 마음으로 북엔드를 구입한 준엽이는 당황했다. 북엔드의 바닥 면이 생각보다 컸기 때문이다. 두 북엔드의 바닥 면을 겹쳐 놓으면 한쪽 북엔드가 기울어져서 보기 싫은 상태가 된다. 준엽이가 책장을 깔끔하게 정리할 수 있도록 필요한 북엔드의 최소 개수를 구해 보자. 북엔드는 충분히 크고 무거워서 책에 밀려 넘어지지 않는다고 가정한다.

입력

첫 번째 줄에 책의 개수 정수 NN (1≤N≤1001 \le N \le 100), 책장의 너비 정수 MM (1≤M≤3001 \le M \le 300), 북엔드 바닥 면의 길이 정수 LL (1≤L≤3001 \le L \le 300)이 주어진다.

두 번째 줄에 각 책의 너비 xix_i (1≤xi≤31 \le x_i \le 3)가 왼쪽 책부터 차례대로 NN개 주어진다.

출력

준엽이가 좋아하는 책장 상태를 만드는 데 필요한 북엔드의 최소 개수를 출력한다. 불가능하면 -1을 출력한다.

힌트

책이 비스듬히 세워져 있어 준엽이가 좋아하지 않는 상태

예제2

  1. 예제 1

    입력
    2 5 2
    1 1
    
    예상 출력
    1
    
  2. 예제 2

    입력
    2 4 3
    1 1
    
    예상 출력
    -1