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

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

영 다이어그램과 영 태블로

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

요약
주어진 영 다이어그램 각 칸을 1부터 N까지 숫자로 채우되 행은 왼쪽에서 오른쪽으로 감소하지 않고 열은 위에서 아래로 증가하는 경우의 수를 구합니다.
난이도

보통10점 중 7점

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

문제

영 다이어그램은 다음 조건을 지키면서 박스를 배열한 것이다.

  • 박스는 각 행과 각 열에서 끊기지 않고 이어진다.
  • 모든 행은 가장 왼쪽에 맞추어 정렬한다.
  • 어떤 행도 바로 위의 행보다 길지 않다.

위에서부터 행의 길이가 3, 2, 2, 1인 배열은 영 다이어그램이다.

[][][]
[][]
[][]
[]

영 태블로는 영 다이어그램의 박스에 다음 조건을 지키면서 수를 채운 것이다.

  • 각 박스에는 1 이상 NN 이하의 정수를 채운다.
  • 각 박스의 정수는 바로 왼쪽 박스의 정수보다 크거나 같다.
  • 각 박스의 정수는 바로 위 박스의 정수보다 크다.

N=3N = 3이고 행의 길이가 3, 2, 1인 영 다이어그램이라면 아래 배치는 세 조건을 모두 만족한다.

1 1 2
2 3
3

NN과 영 다이어그램의 형태가 주어지면 영 태블로를 만드는 방법의 수를 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어지고, 파일의 끝까지 이어진다. 각 테스트 케이스는 두 줄이다.

첫째 줄은 영 다이어그램의 형태를 나타낸다. 맨 앞의 정수 kk는 행의 개수이고 1≤k≤71 \le k \le 7이다. 이어서 각 행에 있는 박스의 개수 l1,l2,…,lkl_1, l_2, \dots, l_k가 kk개 주어지며 7≥l1≥l2≥⋯≥lk≥17 \ge l_1 \ge l_2 \ge \dots \ge l_k \ge 1을 만족한다.

둘째 줄에는 NN이 주어지고 k≤N≤7k \le N \le 7을 만족한다.

출력

각 테스트 케이스마다 만들 수 있는 영 태블로의 개수를 한 줄에 하나씩 출력한다.

예제1

  1. 예제 1

    입력
    1 1
    1
    1 1
    2
    2 2 1
    4
    4 3 2 1 1
    4
    
    예상 출력
    1
    2
    20
    20