프라이빗 스페이스

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

요약
가장 넓은 행의 너비 X를 12 이하에서 가장 작게 정해, 너비가 X부터 1까지인 삼각형 좌석 배치에 모든 단체를 앉히되 같은 행의 이웃 단체 사이에는 빈 좌석을 하나 둔다.
난이도

어려움10점 중 8점

유형
동적 계획법, 비트 연산, 그리디, 완전 탐색
정답자
아직 제출이 없습니다

문제

사람들은 그룹 단위로(혼자 오는 사람도 있습니다) 영화관에 옵니다. 각 그룹은 자신의 그룹 안에서만 어울리고 싶어 하므로, 같은 줄에 앉은 다른 그룹과의 사이에 최소 한 자리 이상의 빈 좌석을 두려고 합니다. 다만 그룹이 줄의 양쪽 끝 중 한쪽에 앉는 경우에는 그쪽으로는 빈 좌석이 필요하지 않습니다.

영화관은 삼각형 모양입니다. 가장 넓은 줄의 좌석 수가 XX이면, 각 줄의 좌석 수는 X,X−1,X−2,…,1X, X-1, X-2, \dots, 1로 한 자리씩 줄어듭니다(폭이 XX부터 11까지인 줄이 각각 하나씩 있습니다). 수용 한계 때문에 가장 넓은 줄의 좌석 수는 최대 1212입니다.

방문객은 목록 (N1,…,Nn)(N_1, \dots, N_n)으로 주어집니다. NiN_i는 정확히 ii명으로 이루어진 그룹의 개수입니다. 모든 그룹은 한 줄 안에 앉아야 하며(그룹을 여러 줄로 나눌 수 없습니다), 그룹이 차지하는 좌석은 서로 연속해야 합니다.

위의 '한 자리 이상 비우기' 규칙을 지키면서 모든 그룹을 동시에 앉힐 수 있는, 가장 넓은 줄의 최소 폭 XX를 구하세요.

입력

첫째 줄에 정수 nn (1≤n≤121 \le n \le 12)이 주어집니다. 이는 그룹이 가질 수 있는 최대 인원수입니다.

둘째 줄에 nn개의 정수가 주어집니다. 그중 ii번째(1부터 시작) 정수는 정확히 ii명으로 이루어진 그룹의 개수 NiN_i입니다.

출력

모든 그룹을 앉힐 수 있는 가장 넓은 줄의 최소 폭 XX를 한 줄에 출력합니다. 11부터 1212까지 어떤 폭으로도 모든 그룹을 앉힐 수 없다면 대신 impossible을 출력합니다.

예제2

  1. 예제 1

    입력
    3
    0 1 1
    
    예상 출력
    3
    
  2. 예제 2

    입력
    3
    2 1 1
    
    예상 출력
    4