조각 놓기

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

요약
보드 길이와 조각들의 길이가 주어질 때, 남은 조각이 어떤 빈틈에도 들어가지 못하도록 배치하는 데 필요한 최소 조각 수를 구합니다.
난이도

보통10점 중 7점

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

문제

민식이는 길이 L인 보드와 여러 개의 조각을 가지고 있다. 모든 조각의 폭은 보드와 같고, 각 조각은 주어진 길이를 가진다.

목표는 가능한 적은 수의 조각을 보드 위에 놓아서, 아직 놓지 않은 어떤 조각도 더 이상 보드에 추가로 놓을 수 없게 만드는 것이다. 조각은 보드 밖으로 튀어나가면 안 되고, 회전할 수 없으며, 서로 겹칠 수 없다. 다만 조각의 끝점끼리 맞닿거나 조각이 보드의 끝에 닿는 것은 허용된다. 조각 사이의 거리와 조각과 보드 끝 사이의 거리는 정수일 필요가 없다.

보드의 길이와 각 조각의 길이가 주어질 때, 목표를 달성하기 위해 놓아야 하는 조각 수의 최솟값을 구하시오.

입력

첫째 줄에 보드의 길이 L과 조각의 수 N이 주어진다.

  • 1 <= L <= 1000
  • 1 <= N <= 30

둘째 줄에는 각 조각의 길이가 주어진다. 각 조각의 길이는 100 이하의 자연수이다.

출력

목표를 달성하기 위해 놓아야 하는 조각 수의 최솟값을 출력한다.

처음부터 놓을 수 있는 조각이 하나도 없다면 0을 출력한다.

예제6

  1. 예제 1

    입력
    36 5
    1 1 5 5 5
    
    예상 출력
    4
    
  2. 예제 2

    입력
    9 2
    1 8
    
    예상 출력
    1
    
  3. 예제 3

    입력
    37 5
    1 1 5 5 5
    
    예상 출력
    5
    
  4. 예제 4

    입력
    18 6
    2 2 2 9 9 10
    
    예상 출력
    2
    
  5. 예제 5

    입력
    1 3
    2 3 4
    
    예상 출력
    0
    
  6. 예제 6

    입력
    703 18
    73 76 90 42 84 13 57 88 80 45 80 1 78 41 73 40 97 42
    
    예상 출력
    7