문제5070--블록 쌓기

5070: 블록 쌓기

[만든사람 : ]
시간제한 : 1.000 sec  메모리제한 : 128 MiB

문제 설명

블록을 쌓는 놀이를 하고 있다. 블록을 위로 쌓을 수 있는 칸들이 총 \(N\)개 있으며, 1번 칸부터 \(N\)번 칸까지 순서대로 붙어 있다.

현재 \(i\)번 칸에는 \(A_i\)개의 블록이 쌓여 있다. 현재 블록들이 쌓인 모양이 난잡하다고 생각해, 다음과 같은 조건들을 만족하도록 블록들을 옮기려고 한다.

  • 각 칸에 쌓인 블록의 개수는 \(L\) 이상 \(R\) 이하이다.
  • 각 칸에 쌓인 블록의 개수는 단조증가한다: \(1 \le i \le N − 1\)에 대해 \(i\)번 칸에 쌓인 블록의 개수는 \(i + 1\) 번 칸에 쌓인 블록의 개수 이하이다.

여러분은 어떠한 칸의 블록을 인접한 칸으로 옮기는 것을 반복해 목표를 달성하려고 한다. 목표를 달성하는 것이 가능한지 판별하고, 가능한 경우 블록을 옮기는 횟수의 최솟값을 구해야 한다.



입력 설명

첫 번째 줄에 \(N, L, R\)이 공백으로 구분되어 주어진다.

두 번째 줄에 \(A_1, . . . , A_N\)이 공백으로 구분되어 주어진다.

제약 조건


  • \(1 \le N \le 100\)
  • \(0 \le L \le R \le 10^9\)
  • \(R − L \le 100\)
  • \(0 \le A_i \le 10^9 (1 \le i \le N)\)
  • 주어지는 수는 모두 정수이다.


부분문제


  1. (7점) \(N \le 50, R − L \le 1\)
  2. (6점) \(N \le 4, R − L \le 50\)
  3. (11점) \(N \le 10, A_1 + · · · + A_N \le 10\)
  4. (11점) \(N \le 50, A_1 + · · · + A_N \le 50\)
  5. (30점) \(N \le 50, R \le 50\)
  6. (10점) \(N \le 50, R − L \le 50\)
  7. (25점) 추가 제약 조건 없음


출력 설명

목표를 달성하는 것이 불가능하다면 −1을 출력한다. 목표를 달성하는 것이 가능하다면 블록을 옮기는 횟수의 최솟값을 출력한다.

입력 예시 Copy

5 3 5
2 0 9 1 4

출력 예시 Copy

7 

게시판

작성자제목(댓글)
글이 없습니다.

출처/분류