题意
有 n n n个点,有些点之间有边。对于 1 1 1到 n n n的每个排列 P P P,构造长度为 n − 1 n-1 n−1的 01 01 01串 s t r str str,其中 s t r [ i ] = 1 str[i]=1 str[i]=1当且仅当 p i p_i pi和 p i + 1 p_{i+1} pi+1之间有边。对每个长度为 n − 1 n-1 n−1的串 s t r str str,求有多少个排列构造出来的串等于 s t r str str。
n ≤ 18 n\le 18 n≤18
分析
考虑对每个串求它超集的答案之和,然后dp一次得到答案。
如果我们把有边相连且在排列中相邻的点连在一起,把序列分成了若干段,满足每一段的长度之和为 n n n。可以发现分段排序后相同的串它们的答案是一样的,故只需要对 n n n的每种整数划分方案,求出该方案的答案即可。
先预处理出 g i , s g_{i,s} gi,s表示选出一条由 i i