아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

재비어, 세는 법을 배우다

시간 제한5초메모리 제한512 MB

요약
서로 다른 양의 정수 m개와 크기 p(최대 5)가 주어질 때, 합으로 만들 수 있는 모든 값마다 그 합이 되는 p개 부분집합의 개수를 세어 오름차순으로 출력한다.
난이도

보통10점 중 6점

유형
동적 계획법, 조합론, 정렬, 구현
정답자
아직 제출이 없습니다

문제

9살 학생 재비어는 온갖 종류의 퍼즐을 좋아한다. 그중에서도 특히 좋아하는 퍼즐은 다음과 같다.

같은 반 친구 제리어가 여러 장의 카드를 만들었다. 각 카드에는 양의 정수가 하나씩 적혀 있으며, 같은 수가 적힌 카드는 없다. 그런 다음 제리어는 등식을 하나 적는다. 우변은 그녀가 고른 양의 정수 nn이고, 좌변은 카드 값 가운데 pp개의 합이다.

X1+X2+⋯+Xp=nX_1 + X_2 + \cdots + X_p = n

재비어는 X1,X2,…,XpX_1, X_2, \dots, X_p 자리에 카드 pp장을 놓아 이 등식을 성립시켜야 한다. 이때 고른 값은 작은 것부터 큰 것 순서로 놓아야 한다는 조건이 추가된다.

Xi<Xi+1,1≤i<pX_i < X_{i+1}, \quad 1 \le i < p

모든 카드의 수가 서로 다르므로, 이는 서로 다른 카드 pp장을 고르는 것과 같다. 고른 카드들을 오름차순으로 배열하는 방법은 정확히 한 가지다. 제리어가 고른 nn에 대해 재비어는 해가 몇 가지인지 알고 싶어 한다. 각 테스트 케이스에서, 만들 수 있는 모든 합 nn마다 그 합을 만드는 방법의 수를 구하라.

입력

여러 개의 테스트 케이스가 주어진다. 입력의 첫 줄에 테스트 케이스의 개수 TT가 주어진다. 이어서 각 테스트 케이스가 차례로 주어진다.

각 테스트 케이스는 두 줄로 이루어진다.

  • 첫째 줄: 공백으로 구분된 두 정수 mm과 pp (1≤p≤51 \le p \le 5). mm은 카드의 개수다.
  • 둘째 줄: 카드에 적힌 서로 다른 양의 정수 mm개. 각 값은 1300013000을 넘지 않는다.

출력

각 테스트 케이스마다 다음을 출력한다.

  • 먼저 Case #x:를 출력한다. 여기서 xx는 11부터 시작하는 테스트 케이스 번호다.
  • 카드 중 정확히 pp장을 골라 만들 수 있는 각 합 nn에 대해, 그 합을 만드는 방법의 수 ww를 n: w 형식으로 한 줄에 출력한다. 합 nn은 오름차순으로 나열하고, 한 가지 이상의 방법으로 만들 수 있는 합만 출력한다. 그래야 출력이 유한하다.
  • 각 테스트 케이스 뒤에 빈 줄을 하나 출력한다.

예제2

  1. 예제 1

    입력
    3
    3 3
    1 2 3
    5 4
    1 3 5 6 7
    10 3
    1 2 3 4 5 6 7 8 9 10
    
    예상 출력
    Case #1:
    6: 1
    
    Case #2:
    15: 1
    16: 1
    17: 1
    19: 1
    21: 1
    
    Case #3:
    6: 1
    7: 1
    8: 2
    9: 3
    10: 4
    11: 5
    12: 7
    13: 8
    14: 9
    15: 10
    16: 10
    17: 10
    18: 10
    19: 9
    20: 8
    21: 7
    22: 5
    23: 4
    24: 3
    25: 2
    26: 1
    27: 1
    
  2. 예제 2

    입력
    1
    1 1
    5
    
    예상 출력
    Case #1:
    5: 1