팔굽혀펴기

면접 대비

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

요약
누적 득점의 합이 N이 되도록 허용된 득점들로 만들 수 있는 가장 큰 최종 점수를 구합니다.
난이도

보통10점 중 4점

유형
동적 계획법
정답자
아직 제출이 없습니다

문제

동혁이는 미식축구 경기를 보면서 팔굽혀펴기를 한다. 응원하는 팀이 득점할 때마다, 그 시점까지 팀이 쌓은 총점과 같은 횟수로 팔굽혀펴기를 한다.

예를 들어 팀이 터치다운으로 7점을 얻으면 7번을 한다. 이어서 필드골로 3점을 더 얻으면 총점이 10점이므로 10번을 한다. 그 다음 세이프티로 2점을 더 얻으면 총점이 12점이므로 12번을 한다. 이 상태에서 경기가 끝났다면 동혁이가 한 팔굽혀펴기는 7+10+12=297 + 10 + 12 = 29번이다.

경기가 끝난 뒤 동혁이는 친구에게 "나 오늘 팔굽혀펴기를 총 NN번 했어"라고 말했다. NN이 주어질 때 팀이 얻은 최종 점수를 구하는 프로그램을 작성하시오. 조건에 맞는 최종 점수가 여러 가지라면 그중 가장 큰 값을 구한다. 팔굽혀펴기를 29번 했다면 팀이 3, 2, 2, 7점을 차례로 얻어 최종 점수가 14점이 되는 경우가 가능한 최종 점수 중 최댓값이다.

입력

첫째 줄에 테스트 케이스의 개수가 주어진다. 이 값은 1 이상 20 이하이다.

각 테스트 케이스의 첫 줄에는 두 정수 NN과 MM (1≤N≤50001 \le N \le 5000, 1≤M≤101 \le M \le 10)이 주어진다. NN은 동혁이가 한 팔굽혀펴기 횟수이고, MM은 그 경기에서 나올 수 있는 득점 종류의 개수이다.

다음 줄에는 MM개의 정수 S1,S2,…,SMS_1, S_2, \dots, S_M (1≤Si≤201 \le S_i \le 20)이 공백으로 구분되어 주어진다. SiS_i는 팀이 한 번에 얻을 수 있는 점수이고, 모든 값은 서로 다르다. 같은 점수를 여러 번 얻을 수 있다.

출력

각 테스트 케이스마다 팀이 얻은 최종 점수의 최댓값을 한 줄에 출력한다. 가능한 최종 점수가 없으면 -1을 출력한다.

예제1

  1. 예제 1

    입력
    4
    29 3
    7 3 2
    15 1
    1
    16 1
    1
    6 2
    3 1
    
    예상 출력
    14
    5
    -1
    3