아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

잔돈 만들기

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

요약
각 액면의 개수가 정해져 있을 때, 1부터 C까지 모든 금액을 부분집합으로 만들 수 있도록 꺼내야 하는 최소 동전 수를 구한다.
난이도

보통10점 중 7점

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

문제

수(Sue)는 식료품점에서 계산 줄에 서 있습니다. 급한 나머지 자기 차례가 되면 정확한 금액으로 지불하고 싶어 합니다. 그런데 물건들의 총액이 정확히 얼마인지는 아직 모르고, 다만 총액의 상한 CC 만 알고 있습니다.

수의 주머니에 든 동전들(각 액면가와 그 개수)이 주어질 때, 11 부터 CC 까지의 모든 금액에 대해 정확히 그 금액을 지불할 수 있도록 하려면 최소 몇 개의 동전을 미리 꺼내 두어야 하는지 구하세요.

여기서 "동전을 꺼내 둔다"는 것은 미리 동전 몇 개를 골라 둔다는 뜻이며, 11 이상 CC 이하의 각 금액마다 꺼내 둔 동전들 중 일부(부분집합)를 골라 그 합이 정확히 그 금액이 되도록 만들 수 있어야 합니다.

입력

입력은 여러 개의 테스트 케이스로 이루어집니다.

각 테스트 케이스의 첫 줄에는 두 정수 CC 와 mm 이 주어집니다 (1≤C≤1091 \le C \le 10^9, 1≤m≤10001 \le m \le 1000). CC 는 수가 거스름돈을 만들 수 있어야 하는 최대 금액이고, mm 은 수가 가진 서로 다른 동전 액면가의 수입니다.

이어지는 mm 개의 줄에는 각각 두 정수 viv_i 와 nin_i 가 주어집니다 (1≤vi≤10001 \le v_i \le 1000, 1≤ni≤10001 \le n_i \le 1000). viv_i 는 ii 번째 액면가의 값이고, nin_i 는 수가 그 액면가의 동전을 몇 개 가지고 있는지를 나타냅니다.

입력의 끝은 00 하나만 있는 줄로 표시되며, 이 줄은 처리하지 않습니다.

출력

각 테스트 케이스마다 한 줄에, 11 부터 CC 까지의 모든 금액에 대해 정확한 거스름돈을 만들 수 있도록 하기 위해 수가 꺼내 두어야 하는 최소 동전 개수를 출력합니다.

어떤 동전 조합으로도 모든 금액을 만들 수 없다면 대신 "Not possible" 을 출력합니다.

예제3

  1. 예제 1

    입력
    4 2
    2 1
    1 3
    9 3
    1 5
    8 2
    7 1
    0
    
    예상 출력
    3
    Not possible
    
  2. 예제 2

    입력
    1 1
    1 1
    0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5 1
    2 10
    0
    
    예상 출력
    Not possible