About CuttingSticks ¶
나무막대를 여러 조각으로 잘라야 한다. 절단 분야에서 가장 뛰어난 것으로 알려진 ACM(Analog Cutting Machinery)이라는 회사에서는 자를막대의 길이에 따라 요금을 부과한다. 그리고 톱의 구조상 한 번에 하나씩만 자를 수 있다.
절단 순서에 따라 요금이 달라진다는 것은 그리 어렵지 않게 알 수 있다. 예를 들어 10미터짜리 막대를 한 쪽 끝으로부터 2, 4, 7미터 위치에서 자르는 경우를 생각해보자. 자를 수 있는 방법은 매우 다양하다. 처음에 2미터 위치에서 자르고 그 다음에 4미터 위치, 마지막으로 7미터 위치에서 자를 수도 있다. 이렇게 하면 요금은 10+8+6=24가 된다. 첫번째 막대는 10미터였고, 그 다음 막대는 8미터였고, 마지막 막대는 6미터였기 때문이다. 하지만 일단 4미터 지점에서 자르고 2미터 지점에서 자른 다음 마지막에 7미터 지점에서 자르면 요금이 10+4+6=20이 되므로, 앞에서 잘랐던 방법으로 하는 것보다 요금을 줄일 수 있다. 어떤 막대가 주어졌을 때, 최소 절단 요금을 구하는 프로그램을 만들어보자.
Input ¶
여러 테스트 케이스가 입력된다. 각 테스트 케이스의 첫째 줄에는 자를 막대의 길이를 나타내는 양의 정수 l이 입력된다. l은 1,000 미만이라고 가정하자. 그 다음 줄에는 잘라야 할 횟수 n (n < 50)이 입력된다.
그 다음 줄에는 n개의 양의 정수 Ci ( 0 < Ci < l) 가 입력되는데, 이 숫자들은 막대를 잘라야 할 위치를 나타내며, 오름차순으로 입력된다.(같은 정수가 두 번 입력되는 일은 없다.)
l의 값으로 0이 입력되면 입력이 종료된 것을 의미한다.
그 다음 줄에는 n개의 양의 정수 Ci ( 0 < Ci < l) 가 입력되는데, 이 숫자들은 막대를 잘라야 할 위치를 나타내며, 오름차순으로 입력된다.(같은 정수가 두 번 입력되는 일은 없다.)
l의 값으로 0이 입력되면 입력이 종료된 것을 의미한다.
풀이 ¶
작성자 | 사용언어 | 개발시간 | 코드 |
문보창 | C++ | 2일 | CuttingSticks/문보창 |
김상섭 | C++ | 3년 | CuttingSticks/김상섭 |
하기웅 | C++ | 몇일 | CuttingSticks/하기웅 |