题意:
给定N,要求构造满足要求的排列,对于其中的一些成员,值大于左右邻居,对于另一些成员,值小于左右邻居。输出满足条件的排列种数。
思路:
设 d p [ i ] [ j ] dp[i][j] dp[i][j]为前 i i i 个数构成的满足条件的合法排列,且末尾为 j j j的个数。
那么对于第 i i i个数,我们只需要考虑其与左邻居的关系(第i个数与右邻居的关系等价于第(i+1)个数与左邻居的关系)
构建一个数组 a a a
如果第 i i i个数大于左邻居,则 a [ i ] = 1 a[i] = 1 a[i]=1
如果第 i i i个数小于左邻居,则 a [ i ] = 0 a[i] = 0 a[i]=0
如果第 i i i个数等于左邻居,则 a [ i ] = − 1 a[i] = -1 a[i]=−1
另外还需要考虑的一个问题是,当我们在考虑前 i i i个数组成的排列且末尾为 j j j时,我们如何通过 d p [ i − 1 ] dp[i-1] dp[i−1]的值来快速推出 d p [ i ] dp[i