만드는 중입니다

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

정확한 거스름돈

면접 대비

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

요약
패키지 금액 목록이 주어질 때, 부분집합의 합으로 정확히 만들 수 없는 가장 작은 금액을 구합니다.
난이도

보통10점 중 4점

유형
그리디, 정렬
정답자
아직 제출이 없습니다

문제

UCF 프로그래밍 팀이 World Finals에 갈 때마다 Glenn은 어떤 물건을 살 때도 거스름돈을 세거나 받지 않도록 정확한 금액을 가지고 다니는 것을 좋아한다. 대부분의 나라는 동전 종류가 많지 않으므로, Glenn은 금액(센트 단위)이 정해진 "패키지"를 만들어 가지고 다닌다. Glenn은 가진 패키지들을 조합해서 정확히 지불할 수 없는 가장 작은 금액(센트)이 얼마인지 알고 싶어 한다.

양의 정수 목록이 주어졌을 때, 목록에 있는 정수들의 부분집합 합으로 표현할 수 없는 가장 작은 정수를 구하라.

입력

첫 줄에는 평가할 패키지 묶음의 개수를 나타내는 정수 nn (1<n≤1001 < n \le 100)이 하나 주어진다. 이어서 nn개의 묶음이 차례로 주어진다. 각 묶음의 첫 줄에는 서로 다른 패키지의 개수를 나타내는 정수 cc (1≤c<311 \le c < 31)만 주어진다. 다음 줄에는 각 패키지의 값(센트)을 나타내는 양의 정수 cc개가 공백 한 칸으로 구분되어 주어진다. 이 cc개 정수의 합은 10910^9을 넘지 않는다. 패키지 값은 서로 다르지 않을 수 있으며, 같은 값의 패키지가 여러 개 있을 수도 있다.

출력

각 묶음마다 먼저 "Set #i: "를 출력한다. 여기서 ii는 1부터 시작하는 묶음 번호이다. 이어서 패키지 값들의 부분집합 합으로 만들 수 없는 가장 작은 값을 양의 정수 하나로 출력한다. 패키지는 하나당 최대 한 번만 쓸 수 있지만, 같은 값의 패키지가 mm개 있으면 그 값은 한 부분집합에서 최대 mm번까지 쓸 수 있다. 각 테스트 케이스의 출력 뒤에는 빈 줄을 하나 남긴다.

예제1

  1. 예제 1

    입력
    3
    6
    12 8 1 2 4 100
    3
    1 2 3
    6
    3 1 3 2 3 3
    
    예상 출력
    Set #1: 28
    
    Set #2: 7
    
    Set #3: 16