문제 4261 · 킬로 V
관측 기록의 보정 묶음
| 시간 제한 | 메모리 제한 | 제출 | 정답 | 맞힌 사람 | 정답 비율 |
|---|---|---|---|---|---|
| 1000ms / 테스트 (언어별 보정은 아래 표) | 메모리: 측정하지 않음(브라우저 채점) | 0 | 0 | 0 | 0.00% |
문제
한 날씨 관측소는 N일 동안 수집한 관측 기록을 보관하고 있다. 각 날짜의 기록에는 그날 센서가 흔들린 정도를 나타내는 정수 등급 A_i가 붙어 있다. 등급은 보정 작업의 비용을 계산할 때만 사용하며, 보정 작업을 수행해도 원래 등급은 바뀌지 않는다. 관측소는 모든 날짜의 기록을 보정한 뒤 하나의 자료로 공개하려고 한다. 보정 장치는 두 가지 방식으로 실행할 수 있다. 첫 번째 방식은 하루의 기록만 보정하는 단일 작업이다. 어느 날짜를 선택하더라도 단일 작업의 비용은 C이다. 두 번째 방식은 날짜가 연속한 이틀의 기록을 한꺼번에 보정하는 연결 작업이다. i일과 i+1일을 연결 작업으로 보정하면 비용은 B+|A_i-A_{i+1}|이다. 여기서 두 등급의 차이는 큰 값에서 작은 값을 뺀 값이다. 모든 날짜는 정확히 하나의 작업에 포함되어야 한다. 어떤 날짜를 단일 작업으로 보정했다면 그 날짜를 연결 작업에 다시 포함할 수 없다. 서로 다른 연결 작업도 날짜를 공유할 수 없다. 하루를 건너뛴 두 날짜를 연결하거나, 사흘 이상의 기록을 한 번의 작업으로 처리하는 것은 허용하지 않는다. 첫날과 마지막 날은 서로 연속한 날짜로 취급하지 않는다. 작업을 실제로 실행하는 순서는 총비용에 영향을 주지 않는다. 각 작업의 비용은 그 작업에 포함된 날짜와 입력으로 주어진 값만으로 결정되며, 전체 비용은 선택한 모든 작업 비용의 합이다. 연결 작업의 비용이 두 번의 단일 작업 비용보다 크더라도 연결 작업 자체가 금지되는 것은 아니다. 반대로 연결 작업이 저렴하더라도 다른 날짜와의 조합까지 고려해야 한다. 관측소가 모든 날짜의 기록을 빠짐없이 보정하는 데 필요한 최소 총비용을 구해야 한다. 최소 비용을 만드는 방법이 여러 개이면 그 비용만 출력한다. 모든 날짜에 단일 작업을 적용할 수 있으므로 가능한 방법은 항상 존재한다.
입력
첫째 줄에 날짜 수 N, 단일 작업 비용 C, 연결 작업의 기본 비용 B가 공백으로 구분되어 주어진다. 둘째 줄에 날짜순으로 N개의 등급 A_1, A_2, …, A_N이 주어진다. 모든 입력값은 정수이며, 1≤N≤190,000, 1≤C≤1,000,000,000, 1≤B≤1,000,000,000, 0≤A_i≤9이다.
출력
모든 날짜를 정확히 한 번씩 보정하는 최소 총비용을 한 줄에 정수로 출력한다.
예제 입력 1
5 7 5 1 2 8 8 3
예제 출력 1
18
예제 입력 2
4 3 10 0 9 0 9
예제 출력 2
12
예제 입력 3
1 4 1 9
예제 출력 3
4
힌트 펼치기
- 앞에서부터 i일의 기록을 모두 보정하는 최소 비용을 생각한다.
- 마지막 작업이 하루를 처리하는 경우와 이틀을 처리하는 경우로 나눈다.
관련 서재 장
알고리즘 분류
동적 계획법풀이 작성
연습 채점은 공개 테스트로 실행합니다. 인증 제출은 코드를 봉인한 뒤 새 입력을 실행하고 서버에서 출력을 대조하며 코드와 판정을 저장합니다.
풀이를 제출하면 여기에서 결과를 확인할 수 있습니다.
연습 기록은 이 브라우저에 최근 50개를 저장합니다. 인증 기록은 내 제출에서 확인하세요.
이 브라우저의 연습 기록
언어별 제한
테스트 케이스마다 새 전역에서 실행하며 준비 시간은 제외합니다. 시간 초과된 출력은 검사하지 않습니다. 브라우저·기기 성능에 따라 실행 시간이 달라집니다.
| 언어 | 엔진(버전) | 시간 제한 | 메모리 |
|---|---|---|---|
| javascript | 사용자 브라우저 JavaScript 엔진 (버전은 브라우저에 따라 다름) | 1000ms / 테스트 | 측정하지 않음(브라우저 채점) |
| python | Pyodide 314.0.7 (CPython 3.14 WASM) | 5000ms / 테스트 | 측정하지 않음(브라우저 채점) |