점진적인 수열

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

요약
연속한 두 차이가 매 단계마다 1 이하로 변하는, 길이 3 이상인 모든 부분 수열의 길이 합을 10^9+7로 나눈 나머지를 구한다.
난이도

어려움10점 중 8점

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

문제

수열 A_1,A_2,…,A_NA\_1, A\_2, \dots, A\_N이 점진적인 수열이라는 것은 수열의 길이가 33 이상이고, 33 이상 NN 이하인 모든 정수 ii가 다음 세 가지 조건 중 하나를 만족한다는 뜻이다.

  • A_i−A_i−1A\_i-A\_{i-1} == A_i−1−A_i−2−1A\_{i-1}-A\_{i-2}-1
  • A_i−A_i−1A\_i-A\_{i-1} == A_i−1−A_i−2A\_{i-1}-A\_{i-2}
  • A_i−A_i−1A\_i-A\_{i-1} == A_i−1−A_i−2+1A\_{i-1}-A\_{i-2}+1

서로 다른 정수로 이루어진 수열 S_1,S_2,…,S_NS\_1, S\_2, \dots, S\_N이 주어진다. 이 수열의 부분 수열이자 점진적인 수열의 길이 합을 구해보자.

입력

첫째 줄에 수열의 길이를 나타내는 정수 NN이 주어진다. (1≤N≤3000)(1\leq N \leq 3000)

둘째 줄에 서로 다른 정수로 이루어진 수열 S_1,S_2,…,S_NS\_1, S\_2, \dots, S\_N이 공백으로 구분되어 주어진다. (1≤S_i≤109)(1 \leq S\_i \leq 10^9)

출력

첫째 줄에 수열 S_1,S_2,…,S_NS\_1, S\_2, \dots, S\_N의 부분 수열이자 점진적인 수열의 길이 합을 구해 출력한다. 단 정답이 너무 커질 수 있으니, 109+710^9+7로 나눈 나머지를 구해 출력한다.

힌트

어떤 수열의 부분 수열이라는 것은 그 수열에서 순서를 바꾸지 않고 몇 개의 원소를 제거해서 만들 수 있는 수열이다.

예제4

  1. 예제 1

    입력
    3
    2 4 6
    
    예상 출력
    3
    
  2. 예제 2

    입력
    5
    1 4 6 8 9
    
    예상 출력
    32
    
  3. 예제 3

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

    입력
    4
    1 10 7 2
    
    예상 출력
    0