首页 > 其他 > 详细

CF285E

时间:2020-10-12 12:54:20      阅读:16      评论:0      收藏:0      [点我收藏+]

\(1\sim n\)排列的完美数 有多少个\(i\)满足\(|P_i-i|=1\),求有多少个长度为\(n\)的完美数恰好为\(m\)的排列

因为恰好,容易想到二项式反演

令完美数恰好为\(m\)的排列数\(G(m)\),构造方案数,强行令\(m\)个位置完美,剩下的放任自流方案数为\(F(m)\),对于一种完美数为\(M\)的排列,在\(F(m)\)中会被统计\(\large {M\choose m}\)

\(\large F(m)=\sum\limits_{i=m}^n{i\choose m}G(i)\)

二项式反演\(\large G(m)=\sum\limits_{i=m}^n(-1)^{i-m}{i\choose m}F(i)\),所以求\(F\)导出\(G\)

\(f[i][j][0/1][0/1]\)为前\(i\)个位置,选取\(j\)个完美位置,选或不选\(i+1\)\(0\)是选

作为完美位

\(i-1\)

\(f[i][j][0][0]+=f[i-1][j-1][0][0]\); \(f[i][j][1][0]+=f[i-1][j-1][0][1]\)

选择\(i+1\)

\(f[i][j][0][1]+=f[i-1][j-1][0][0]+f[i-1][j-1][1][0]\)

\(f[i][j][1][1]+=f[i-1][j-1][0][1]+f[i-1][j-1][1][1]\)

不作为完美位

\(f[i][j][0][0]+=f[i-1][j][0][0]+f[i-1][j][1][0]\)

\(f[i][j][1][0]+=f[i-1][j][0][1]+f[i-1][j][1][1]\)

\(i=1\)\(i=n\)

边界\(f[1][0][0][0]=1\) \(f[1][1][0][1]=1\)

\(i=n\)去掉\(i+1\)转移

\(F(m)=(f[n][n][0][0]+f[n][m][1][0])*(n-m)!\)

扔进反演式子就好

\(G(m)=\large\sum\limits_{i=m}^n(-1)^{i-m}{i\choose m}(f[n][i][0]+f[n][i][1])*(n-i)!\)

CF285E

原文:https://www.cnblogs.com/shikeyu/p/13801402.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!