[USACO19DEC]Tree Depth P

题意

求逆序对为\(k\)\(n\)排列中,生成的笛卡尔数,每个位置的深度和。\(n\le 300\)

做法

\(f_{k}\)\(n\)排列中逆序对为\(k\)的个数,其生成函数为:\[\prod\limits_{i=0}^{n-1}(\sum\limits_{j=0}^i x^i)\]

把统计深度转换为统计祖先个数\(+1\)
考虑\(i,j(i<j)\)\(i\)\(j\)的祖先,充要条件为在区间\([i,j]\)\(i\)是最小的

然后我们忘掉证明这个生成函数最简单的方式,也就是从小到大推的那种
考虑一段区间\([i,j]\),先做这里的生成函数,然后再做前面的,再做后面的,不需要数的大小了,任意数都能产生所有的可能

也就是说,枚举\(i,j\),只考虑换掉原来生成函数的一项即可,然后讨论钦定哪一个为祖先,这时候是明确逆序对个数贡献的

复杂度\(O(n^2+nk)\)

猜你喜欢

转载自www.cnblogs.com/Grice/p/12322384.html