수수께끼

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

요약
동전을 앞에서부터 몇 개 가져와야 1부터 K까지 모든 금액을 부분집합 합으로 만들 수 있는지, 도달 가능한 구간을 확장하는 그리디 방법으로 구하고 불가능하면 -1을 출력합니다.
난이도

보통10점 중 4점

유형
그리디, 배열, 누적 합
정답자
아직 제출이 없습니다

문제

엘레오노라의 할머니 서차(Sercha)는 손주들에게 수학 수수께끼 내기를 좋아합니다. 지난 가족 여행에서 할머니는 이런 문제를 냈습니다.

"어떤 가게가 11부터 KK까지의 가격이 매겨진 상품을 판다고 하자. 나는 NN개의 동전을 가지고 있고, 그 액면가는 순서대로 A1,A2,…,ANA_1, A_2, \ldots, A_N 이란다. 나는 나이가 많아 되도록 적은 수의 동전만 챙기고 싶구나. A1A_1부터 하나씩 순서대로 동전을 챙긴다고 할 때, 앞에서부터 몇 개를 챙기면 챙긴 동전들의 부분집합으로 11부터 KK까지의 모든 가격을 정확히 지불할 수 있겠니?"

엘레오노라는 몇 초 만에 답을 말하고는 생각했습니다. "이런 기본적인 알고리즘쯤은 이제 쉬워요!"

엘레오노라를 도와주세요. 주어진 순서대로 앞에서부터 동전을 챙길 때, 챙긴 동전들의 부분집합의 합으로 11부터 KK까지의 모든 금액을 만들 수 있게 되는 데 필요한 최소 동전 개수를 구하세요. NN개를 모두 챙겨도 불가능하면 −1-1을 출력합니다.

입력

첫 줄에 테스트 케이스의 수 TT가 주어집니다.

각 테스트 케이스의 첫째 줄에는 두 정수 NN과 KK가 주어집니다 (N≤100000N \le 100000, K≤1000000K \le 1000000). 둘째 줄에는 NN개의 동전 액면가 A1,A2,…,ANA_1, A_2, \ldots, A_N이 순서대로 공백으로 구분되어 주어집니다 (Ai≤100000A_i \le 100000).

출력

각 테스트 케이스마다, 앞에서부터 순서대로 동전을 챙길 때 11부터 KK까지의 모든 가격을 챙긴 동전들의 부분집합의 합으로 지불할 수 있게 하기 위해 챙겨야 하는 최소 동전 개수를 한 줄에 출력합니다. NN개를 모두 챙겨도 불가능하면 −1-1을 출력합니다.

예제3

  1. 예제 1

    입력
    3
    7 10
    1 2 3 4 5 6 7
    3 3
    2 4 1
    3 6
    3 1 4
    
    예상 출력
    4
    3
    -1
    
  2. 예제 2

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

    입력
    1
    2 1
    2 1
    
    예상 출력
    2