동전 집합 만들기
시간 제한1초메모리 제한1024 MB
정수 N이 주어질 때, 1원부터 N-1원까지는 탐욕 알고리즘이 최소 동전 수를 찾고 N원에서는 실패하는 동전 집합을 구합니다. 그런 집합이 없으면 -1을 출력합니다.
문제
거스름돈 문제는 가게에서 물건을 산 뒤 돌려줄 거스름돈을 가장 적은 개수의 동전으로 맞추는 문제이다. 동전 집합은 거스름돈을 만들 때 쓸 수 있는 동전 값들의 모음이다. 그리디 알고리즘은 남은 금액을 넘지 않는 동전 중 가장 큰 값을 반복해서 고르고, 거스름돈을 다 맞출 때까지 이 과정을 계속한다.
최적해는 가장 적은 개수의 동전을 쓰는 해이다. 그러나 그리디 알고리즘이 항상 최적해를 주지는 않으며, 특정 조건에서는 최적이 아닌 해를 줄 수 있다.
양의 정수 이 주어진다. 1원부터 원까지 모든 금액에 대해서는 그리디 알고리즘이 최적해를 주지만, 원에 대해서는 최적해를 주지 않는 동전 집합을 찾아라. 값이 1인 동전은 항상 동전 집합에 포함된다.
입력
첫 줄에 테스트 케이스의 개수 가 주어진다. 다음 개의 줄에는 각각 정수 이 하나씩 주어진다.
출력
각 테스트 케이스마다 조건을 만족하는 동전 집합을 만들 수 없으면 -1을 출력한다.
만들 수 있으면 첫 줄에 동전 집합의 크기 를 출력한다. 다음 줄에는 동전 값 를 오름차순으로 공백으로 구분해 출력한다. 동전 집합의 크기는 최소일 필요는 없다.
제한