ことばがありあまれどなお、 このゆめはつづ|

trsins

园龄:3年10个月粉丝:18关注:2

【做题记录】CF285E Positions in Permutations

  • CF285E Positions in Permutations

    • 算法:dp、组合数学、容斥

题目:

称一个 1n 的排列的完美数为有多少个 i 满足 |Pii|=1

求有多少个长度为 n 的完美数恰好为 m 的排列。

n1000,0mn

题解:

设完美数恰好为 m 的排列共有 f(m) 种。

再令 g(m) 表示强制性放 m 个满足条件的数,其余的随便放(也就是可能满足也可能不满足)的排列的个数。

所以显然有

g(m)=i=mn(im)f(i)

又通过二项式反演得

f(m)=i=mn(1)im(im)g(i)

那么对于 f 求出 g 即可。

然后我们设计一个感性的 dp

因为 g 只需要强制要求 m 位,所以我们只需要考虑那 m 位,其余的乘上 (nm)! 即可(随便放)

考虑这个 dp

dpi,j,0/1,0/1 表示到了第 i 位而此时取了 j 个完美的位置,选还是不选第 i,i+1 位。

分类。


  1. 当前为完美位

那么就要有 |Pii|=1,故 Pi 只能为 i1i+1

  • 选择 i1

那么此时必然要保证 i1 位不选

dpi,j,1,0+=dpi1,j1,0,1

(选择 i

dpi,j,0,0+=dpi1,j1,0,0

(不选 i

  • 选择 i+1

同理保证 i+1 位不选。而此时 i1 位可以随便选择,所以比起上面的多了一种可能(即选还是不选 i1 位)

dpi,j,1,1+=dpi1,j1,0,1+dpi1,j1,1,1

(选择 i

dpi,j,0,1+=dpi1,j1,0,0+dpi1,j1,1,0

(不选择 i


  1. 当前不为完美位

那么就不能选择 i1i+1 位了。

转移很显然了,注意将 j1 改为 j (不选 i 所以还是只选了 j 个)

dpi,j,1,0+=dpi1,j,0,1+dpi1,j,1,1

(选择 i

dpi,j,0,0+=dpi1,j,0,0+dpi1,j,1,0

(不选 i


然后注意边界:

  1. i=1

dp1,0,0,0=dp1,1,0,1=1

  1. i=n

注意去掉 i+1 的可能。

g(m)=(dpn,m,1,0+dpn,m,0,0)×(nm)!

然后再套回去求出 f(m) 即可。

时间复杂度 O(n2)

本文作者:trsins

本文链接:https://www.cnblogs.com/trsins/p/15776619.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   trsins  阅读(33)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示