地精部落
$Description$
$Solution$
神仙状态
设 $f_{i, j}$ 表示有 $i$ 个数,开头为 $j$ ,且 $j$ 为山峰的方案数。
首先要知道三个性质:
$$
对于一个满足条件的数列,其中的两个数\ i\ 与\ i + 1\ ,如果他们不相邻,交换他们的位置,这个数列仍然满足条件。
$$
$$
对于一个满足条件的数列,将数列中的每个数变为\ n + 1 - this\ ,这个数列的山峰与山谷情况相反,但仍然满足条件。
$$
$$
对于一个满足条件的数列,把这个数列顺序反一下,仍然满足条件。
$$
然后根据这三个性质,我们把一个数列分两类讨论。
我们把情况分成开头这个 $j$ 与 $j - 1$ 是否相邻来讨论。
对于两者不相邻的情况,根据性质一,我们发现直接交换两个数,把头换成 $j - 1$ 就可以得到一个新的合法的数列,所以可以通过 $f_{i, j - 1}$ 转移到。
对于两者相邻的情况,我们首先可知如果 $j$ 是山峰,那么 $j - 1$ 肯定是山谷,问题转化成有 $i - 1$ 个数,以 $j - 1$ 开头语,且 $j - 1$ 为山谷的方案数, 那么根据性质二,我们首先可以把这个数列转变成 $j - 1$ 为山峰的情况,即每个数变为 $n + 1 - this$ ,然后就可以通过 $f_{i - 1, i - j + 1}$ 转移到了。
所以最后的转移方程就是
$$
f_{i, j} = f_{i, j - 1} + f_{i - 1, i - j + 1}
$$
$Code:$
1 |
|