김강산

시간 제한3초메모리 제한128 MB

요약
첫 번째와 마지막 더미 높이는 고정한 채, 인접한 높이 차가 d 이하가 되도록 중간 더미들을 조정하는 데 필요한 최소 벽돌 수를 구합니다.
난이도

보통10점 중 6점

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

문제

김강산은 벽돌을 쌓아 만든 인공 산으로, 암벽 등반을 연습하려는 사람들이 찾아온다. 그런데 경사가 너무 가팔라 초보자가 오르기에는 어렵다. 관리인 상근이는 산을 조금 더 완만하게 다듬으려고 한다.

김강산은 일렬로 늘어선 nn개의 벽돌 무더기로 이루어져 있으며, 왼쪽에서 ii번째 무더기에는 벽돌이 hih_i개 쌓여 있다. 인접한 두 무더기의 높이 차이는 ∣hi+1−hi∣|h_{i+1} - h_i|이다. 상근이는 인접한 모든 무더기의 높이 차이가 dd 이하가 되도록 만들고 싶다.

상근이는 아무 무더기에나 벽돌을 더 쌓거나 빼낼 수 있지만, 첫 번째 무더기와 마지막 무더기의 벽돌 개수는 바꿀 수 없다. 벽돌 하나를 쌓거나 빼는 데 드는 노력은 11이고, 상근이는 전체 노력을 최소로 하고 싶다.

각 무더기의 높이가 주어졌을 때, 인접한 모든 높이 차이를 dd 이하로 만들기 위해 쌓거나 빼야 하는 벽돌 개수의 최솟값을 구하시오. 조건을 만족시키는 것이 불가능하면 impossible을 출력한다.

입력

첫째 줄에 테스트 케이스의 개수 TT가 주어진다. (1≤T≤1001 \le T \le 100)

각 테스트 케이스는 두 줄로 이루어진다. 첫째 줄에는 무더기의 개수 nn과 허용되는 최대 높이 차이 dd가 공백으로 구분되어 주어진다. (2≤n≤1002 \le n \le 100, 0≤d≤1090 \le d \le 10^9) 둘째 줄에는 각 무더기에 쌓인 벽돌의 개수 h1,h2,…,hnh_1, h_2, \dots, h_n이 공백으로 구분되어 주어진다. (0≤hi≤1090 \le h_i \le 10^9)

출력

각 테스트 케이스마다, 인접한 모든 무더기의 높이 차이를 dd 이하로 만들기 위해 쌓거나 빼야 하는 벽돌 개수의 최솟값을 한 줄에 하나씩 출력한다. 조건을 만족시키는 것이 불가능하면 impossible을 출력한다.

예제1

  1. 예제 1

    입력
    3
    10 2
    4 5 10 6 6 9 4 7 9 8
    3 1
    6 4 0
    4 2
    3 0 6 3
    
    예상 출력
    6
    impossible
    4