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

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

박스

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

요약
너비 합이 W를 넘지 않게 상자를 왼쪽부터 빈틈없이 나열하고 남은 공간에 들어갈 상자가 남지 않는 순서의 가짓수를 같은 너비는 구분하지 않고 구합니다.
난이도

보통10점 중 7점

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

문제

너비가 w1,w2,…,wnw_1, w_2, \dots, w_n인 박스 nn개와 너비가 WW인 큰 박스가 있다. 박스를 큰 박스에 넣는 방법의 수를 구하는 프로그램을 작성하시오.

조건은 다음과 같다.

  1. 큰 박스에 넣은 박스의 너비의 합은 WW보다 크면 안 된다.
  2. 박스는 큰 박스의 가장 왼쪽부터 하나씩 넣으며, 박스 사이에 빈 공간이 있으면 안 된다. 큰 박스의 오른쪽에는 빈 공간이 남을 수 있지만, 그 공간에 들어갈 수 있으면서 아직 넣지 않은 박스가 있으면 안 된다.
  3. 한 방법에서 어떤 박스가 ii번째에 있는데 다른 방법에서 그 박스가 다른 위치에 있다면, 두 방법은 서로 다른 방법이다.
  4. 너비가 같은 두 박스는 서로 구분할 수 없다.

입력

첫째 줄에 테스트 케이스의 개수 TT (T≤100T \le 100)가 주어진다.

각 테스트 케이스의 첫째 줄에 nn (1≤n≤1001 \le n \le 100)과 WW (1≤W≤10001 \le W \le 1000)가 주어진다. 둘째 줄에 박스의 너비 w1,w2,…,wnw_1, w_2, \dots, w_n이 주어진다. (1≤wi≤W1 \le w_i \le W)

출력

각 테스트 케이스마다 Case x: y 형식으로 한 줄씩 출력한다. xx는 1부터 시작하는 테스트 케이스 번호이고, yy는 방법의 수를 1000710007로 나눈 나머지이다.

힌트

n=3n = 3, W=5W = 5이고 너비가 1,2,31, 2, 3인 경우 가능한 방법은 다음 여섯 가지이다. 각 줄은 왼쪽부터 넣은 박스의 너비를 순서대로 적은 것이다.

  • 1 2
  • 1 3
  • 2 1
  • 2 3
  • 3 1
  • 3 2

박스를 하나만 넣는 1, 2, 3은 모두 2번 조건에 걸린다. 오른쪽 빈 공간에 들어갈 수 있는 박스가 아직 남아 있기 때문이다.

예제2

  1. 예제 1

    입력
    2
    3 5
    1 2 3
    5 10
    1 2 2 4 5
    
    예상 출력
    Case 1: 6
    Case 2: 30
    
  2. 예제 2

    입력
    2
    5 100
    1 2 3 4 5
    6 100
    1 1 2 2 3 3
    
    예상 출력
    Case 1: 120
    Case 2: 90