#J1038. 最长上升子序列计数

最长上升子序列计数

题目描述

给你一个长度为 nn 的序列 a1ana_1\sim a_n,请你求出该序列中有多少个不同的最长上升子序列(两个子序列 xxyy 不同当且仅当 xxyy 在原序列中的下标集合不同 )。
定义一组序列 b1bmb_1\sim b_ma1ana_1\sim a_n 的子序列当且仅当 bb 可以通过 aa 删除若干个元素(也可以不删)后剩下的元素保持相对顺序不变形成。
例如:序列 a=[1,2,3,4,5]a=[1,2,3,4,5],序列 b=[2,4,5]b=[2,4,5]aa 的子序列。

输入格式

第一行一个整数 n(1n5000)n(1\le n\le 5000)
第二行 nn 个整数 a1an(1ai109)a_1\sim a_n(1\le a_i\le 10^9)

输出格式

一行一个整数,表示最长上升子序列的个数(输出答案对 109+710^9+7 取模的结果)。

输入输出样例 #1

输入 #1

6
3 2 1 4 3 5

输出 #1

5

说明/提示

符合要求的子序列有:

$$[3,4,5]\\ [2,4,5] \\ [1,4,5] \\ [2,3,5] \\ [1,3,5] $$