题目大意:1~n每个数各用两次,构成一个先非降再非升的序列h(长度为2n)。有若干个限制条件$x_i\, sign_i\, y_i,\, sign_i\in\{<,>,\le ,\ge ,=\}$,表示构成的序列必须满足$h_{x_i}\, sign_i\, h_{y_i}$。求符合条件的序列的数量。
先考虑没有限制条件时序列怎么生成。
假设n=3,开始时序列是这样:
------
然后放入两个1,有三种放法,都放左边,都放右边,一个左边一个右边。
1----1
11----
----11
然后放两个2,这里以前面的第一种情况为例。
12--21
122--1
1--221
最后在剩下的两个空格放3。
显然,总数可以通过递推求得:
$f\left( i,j\right) =f\left( i+1,j-1\right) +f\left( i+2,j\right) +f\left( i,j-2\right)$。
现在考虑限制条件,如果在一个位置i上放数字时,这个位置上有$h_i<h_j$的限制条件,那么位置j必须还没有放过数字。其他的限制也差不多,只要在递推时判断一下就行了。
代码在此。