만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

이상적인 울타리

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

요약
각 총 길이 X(0 이상 S 이하)마다, 한 줄기를 v 높이에서 자르면 그보다 높은 인접 줄기도 v에서 잘려야 하는 규칙을 지키는 자르기 방법의 수를 구합니다.
난이도

보통10점 중 6점

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

문제

정원에 nn개의 줄기로 이루어진 울타리가 있다. 이 줄기는 식물인 아이비이며 Puljka가 아니다. ii번째 줄기의 높이는 AiA_i이고, 모든 줄기 높이의 합은 SS이다.

울타리를 다듬기 위해 Malnar 씨는 정한 높이에서 줄기를 자른다. 줄기는 쉽게 부러지므로 각 줄기는 최대 한 번만 자를 수 있다. Malnar 씨는 가위질에 능숙하지 않아서, 줄기 하나를 높이 vv에서 자르면 이웃한 줄기 중 높이가 vv보다 엄격히 큰 줄기도 같은 높이 vv에서 잘라야 한다. 모든 줄기를 자를 필요는 없다. 가위를 잊고 왔다면 한 줄기도 자르지 않는다.

그림 I.1 왼쪽은 올바른 자르기이고 오른쪽은 잘못된 자르기이다. 2번째와 3번째 열 사이, 4번째와 5번째 열 사이에서 자르는 것은 허용되지 않는다.

00부터 SS까지의 길이 XX마다, Malnar 씨는 울타리를 잘라서 전체 길이가 XX가 되는 방법이 몇 가지인지 알고 싶어 한다. 어떤 줄기의 높이라도 다르면 서로 다른 울타리이다. 정확한 개수 대신 998 244 353998\,244\,353으로 나눈 나머지를 구한다.

입력

첫 줄에 줄기의 수 nn (1≤n≤2 0001 \le n \le 2\,000)이 주어진다. 둘째 줄에는 nn개의 정수가 주어지며, ii번째 수는 ii번째 줄기의 높이 AiA_i (0≤Ai≤2 0000 \le A_i \le 2\,000)이다. 모든 높이의 합 SS는 2 0002\,000 이하이다.

출력

S+1S + 1개의 줄을 출력한다. ii번째 줄에는 전체 높이의 합이 i−1i - 1인 울타리의 가능한 개수를 998 244 353998\,244\,353으로 나눈 나머지를 출력한다.

힌트

첫 번째 예제에서 전체 길이가 11인 울타리는 만들 수 없다. 3번째 줄기를 높이 00에서 자르면 4번째 줄기도 높이 00에서 잘라야 하고, 반대로 4번째 줄기를 자르면 3번째 줄기도 잘라야 하기 때문이다. 전체 길이가 22부터 77까지인 각 경우에는 정확히 한 가지 방법이 있다. 길이 22부터 66까지는 4번째 열을 잘라서 만들고, 길이 77은 아무것도 자르지 않아서 만든다. 전체 길이가 00인 울타리는 모든 줄기를 높이 00에서 자르면 만들어진다.

예제3

  1. 예제 1

    입력
    4
    0 0 1 6
    
    예상 출력
    1
    0
    1
    1
    1
    1
    1
    1
    
  2. 예제 2

    입력
    3
    4 6 0
    
    예상 출력
    1
    0
    1
    0
    1
    0
    1
    0
    1
    1
    1
    
  3. 예제 3

    입력
    5
    1 1 2 1 0
    
    예상 출력
    1
    0
    0
    0
    1
    1