题意简述
一个序列 $b_1, b_2, \dots, b_k$ 被称为好的(good),如果存在一种对每个索引 $i$ 进行红色或蓝色染色的方案,使得对于每一对满足 $i < j$ 且 $b_i > b_j$ 的索引,分配给 $i$ 和 $j$ 的颜色不同。
给定一个序列 $a_1, a_2, \dots, a_n$。计算该序列的好的子序列的数量,包括空子序列。由于答案可能非常大,请输出它对 $10^9+7$ 取模的结果。
思路分析
主要是需要发现:对于一个长度为 $k$ 的下降子序列,我们至少需要 $k$ 种颜色进行染色。
也就是说,对于本题,我们实际是要求长度不超过 $2$ 的最长下降子序列的个数。
记 $f(i,m_1,m_2)$ 表示考虑前 $i$ 个数,取得最大值 $m_1$ 及次大值 $m_2$ 的方案数。
转移的话,考虑取不取当前位置的元素:
- 如果取第 $i$ 个位置的元素,那么它与 $m_1,m_2$ 有三种大小关系
- $m_1 \gt m_2 \gt a_i$,这种情况不合法,因为形成了长度为 $3$ 的下降子序列。此时 $f(i,m_1,m_2)=0$
- $m_1 \gt a_i \gt m_2$,能从次大值 $m_2$ 转移来的一定可以从次大值 $a_i$ 转移来,所以此时 $f(i,m_1,a_i)=f(i,m_1,a_i) + f(i-1,m_1,m_2)$。
- $a_i \gt m_1 \gt m_2$,同理,能从最大值 $m_1$ 转移来的一定可以从 $a_i$ 转移来,所以此时 $f(i,a_i,m_1)=f(i,a_i,m_1) + f(i-1,m_1,m_2)$。
- 如果不取第 $i$ 个位置的元素,那么 $f(i,m_1,m_2)=f(i,m_1,m_2)+f(i-1,m_1,m_2)$