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