만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

개업 2

면접 대비

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

요약
주어진 냄비 크기들로 한 번 조리 시 냄비 하나 또는 서로 다른 두 개를 사용해 크기의 합만큼 국수를 만든다. 총합이 정확히 N이 되는 최소 조리 횟수를 구한다.
난이도

보통10점 중 5점

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

문제

해빈이는 짜장면을 정말 좋아한다. 짜장면을 너무 좋아한 나머지 짜장면만 파는 중국집을 개업했다. 해빈이는 양손잡이여서 한 번 요리할 때 웍(중국 냄비)을 두 개까지 동시에 쓸 수 있다.

웍

해빈이는 낭비를 싫어해서 웍을 항상 용량만큼 꽉 채워 쓴다. 크기가 ss인 웍 하나로 요리하면 정확히 ss그릇이 나오고, 크기가 ss와 tt인 웍 두 개를 동시에 쓰면 정확히 s+ts+t그릇이 나온다. 한 번의 요리에 같은 웍을 두 번 넣을 수는 없지만, 크기가 같은 웍을 두 개 이상 가지고 있다면 그중 두 개를 함께 쓸 수 있다. 웍은 요리가 끝나면 다음 요리에 다시 쓸 수 있다.

주문받은 그릇 수가 NN일 때, 모든 요리에서 나온 그릇 수의 합이 정확히 NN이어야 한다. 최소 몇 번의 요리로 주문을 처리할 수 있는지 구하는 프로그램을 작성하시오.

입력

첫째 줄에 해빈이가 주문받은 짜장면의 그릇 수 NN과 가지고 있는 웍의 개수 MM이 공백으로 구분되어 주어진다. (1≤N≤100001 \le N \le 10000, 1≤M≤10001 \le M \le 1000)

둘째 줄에 웍의 크기 S1,S2,…,SMS_1, S_2, \dots, S_M이 공백으로 구분되어 주어진다. (1≤Si≤N1 \le S_i \le N) 크기가 같은 웍을 여러 개 가지고 있을 수도 있다.

출력

모든 주문을 처리하는 데 필요한 최소 요리 횟수를 출력한다. 어떤 방법으로도 정확히 NN그릇을 만들 수 없으면 -1을 출력한다.

힌트

크기가 1, 3인 웍 하나씩으로 6그릇을 만드는 경우를 보자. 3그릇짜리 웍으로 한 번 요리하고 같은 웍으로 다시 한 번 요리하면 두 번 만에 6그릇이 된다. 웍은 요리마다 다시 쓸 수 있지만, 한 번의 요리에 함께 넣을 수 있는 것은 서로 다른 웍 두 개뿐이다.

예제2

  1. 예제 1

    입력
    5 2
    1 3
    
    예상 출력
    2
    
  2. 예제 2

    입력
    6 2
    1 3
    
    예상 출력
    2