题意:
一个序列p1、p2、p3……pn是由1、2、3……n这些数字组成的 现给出一些条件pi<pj 问满足所有条件的排列的个数
思路:
很容易想到用一条有向的线连接所有的pi和pj 那么就构成了有向无环图(题中说有解所以无环)
又因为pi各不相同 那么题目就变成了有向无环图的拓扑排序的种类数
题目中边数较少 所以可能出现不连通情况 我们先讨论一个连通集合内拓扑排序的种类数
题目中m较小 可以利用状压后的记忆化搜索解决
现在考虑如果知道了A和B两个集合各自的种类数 如果把它们合起来
由于各自种类已知 我们可以把A和B当成有序的排列 那么问题就变成了将|B|个元素插空到|A|个元素中间
这个可以利用dp解决 同时n较小 我们可以直接打出表
代码: