티스토리 뷰

프로그래밍/알고리즘

막대자르기

터프 프로그래머 2011. 2. 25. 23:28

UVA10003 막대 자르기

나무 막대를 여러 조각들로 잘라야만 한다.

가장 적당한 업체인 아날로그 벌목 공업사는 잘라야 될 막대의 전체 길이에 따라서 돈을 청구한다. 이들의 작업 절차는 한 시간에 한번만 자를 것을 요구한다.


자르는 순서를 달리하면 다른 조각들이 만들어질 수 있다.

예를 들어, 끝에서 2, 4, 7 미터에서 자를 수 있는 길이 10 미터의 막대기를 생각해 보자. 자르는 순서는 몇 가지가 있을 수 있다. 이럴 경우 처음 막대는 10 미터였으며, 자른 이후에는 8 미터에서 다음 4를 잘라야 하며, 마지막 한번 자르려면 6의 막대에서 자르므로, 10 + 8 + 6 = 24 의 돈을 막대 자르는 데 지출해야 한다. 또 다른 방법은 먼저 4에서 자르고, 다음은 2에서 자르면 4에서 2를 자르고, 마지막은 7에서 자르면 막대 길이 6짜리에서 자르므로 10 + 4 + 6 = 20 으로 더 싼 가격으로 막대를 자를 수 있다. 시장은 주어진 막대를 자르는 데 최소한의 비용이 드는 방법을 찾아내는 컴퓨터를 믿고 있다.


입력

입력은 몇가지 테스트 데이터로 구성된다. 각 테스트 데이터의 첫 번째 줄은 잘라야 할 막대의 길이를 표현하는 정수 L 이 입력된다. L은 1000보다 작은 값을 갖는다. 다음 줄에는 잘라야 할 막대 개수 n 이 입력된다. n 은 50보다 작은 양의 정수이다. 그 다음 줄은 잘라야 될 지점들이 Cj가 오름차순으로 n개 입력된다. Cj의 범위는 0 < Cj < L 이다.

테스트 데이터 첫 줄에 L 이 입력되면 입력 종료를 나타낸다.


출력

주어진 막대를 자르는 최소한의 비용을 계산하는 벌목 문제의 최적의 해답을 출력해야만 한다. 출력 형식은 아래 출력 예제를 참고하여라.


입력 예제

100

3

25 50 75

10

4

4 5 7 8

0



출력 예제

The minimum cutting is 200.

The minimum cutting is 22.

'프로그래밍 > 알고리즘' 카테고리의 다른 글

구조체 정렬  (0) 2011.02.25
이전순열 다음순열  (0) 2011.02.25
떡 먹는 호랑이 - 다이나믹 프로그래밍  (0) 2011.02.25
가족 찾기  (0) 2011.02.25
거듭 제곱 구하기  (0) 2011.02.25
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday