정확한 거스름돈
면접 대비시간 제한1초메모리 제한1024 MB
패키지 금액 목록이 주어질 때, 부분집합의 합으로 정확히 만들 수 없는 가장 작은 금액을 구합니다.
문제
UCF 프로그래밍 팀이 World Finals에 갈 때마다 Glenn은 어떤 물건을 살 때도 거스름돈을 세거나 받지 않도록 정확한 금액을 가지고 다니는 것을 좋아한다. 대부분의 나라는 동전 종류가 많지 않으므로, Glenn은 금액(센트 단위)이 정해진 "패키지"를 만들어 가지고 다닌다. Glenn은 가진 패키지들을 조합해서 정확히 지불할 수 없는 가장 작은 금액(센트)이 얼마인지 알고 싶어 한다.
양의 정수 목록이 주어졌을 때, 목록에 있는 정수들의 부분집합 합으로 표현할 수 없는 가장 작은 정수를 구하라.
입력
첫 줄에는 평가할 패키지 묶음의 개수를 나타내는 정수 ()이 하나 주어진다. 이어서 개의 묶음이 차례로 주어진다. 각 묶음의 첫 줄에는 서로 다른 패키지의 개수를 나타내는 정수 ()만 주어진다. 다음 줄에는 각 패키지의 값(센트)을 나타내는 양의 정수 개가 공백 한 칸으로 구분되어 주어진다. 이 개 정수의 합은 을 넘지 않는다. 패키지 값은 서로 다르지 않을 수 있으며, 같은 값의 패키지가 여러 개 있을 수도 있다.
출력
각 묶음마다 먼저 "Set #i: "를 출력한다. 여기서 는 1부터 시작하는 묶음 번호이다. 이어서 패키지 값들의 부분집합 합으로 만들 수 없는 가장 작은 값을 양의 정수 하나로 출력한다. 패키지는 하나당 최대 한 번만 쓸 수 있지만, 같은 값의 패키지가 개 있으면 그 값은 한 부분집합에서 최대 번까지 쓸 수 있다. 각 테스트 케이스의 출력 뒤에는 빈 줄을 하나 남긴다.