# BZOJ P2111 Perm 排列计数【详细题解】【递推】【组合数学】

OI/ACM之数论数学 同时被 2 个专栏收录
32 篇文章 0 订阅
126 篇文章 0 订阅

P 1 = 1 , P 2 = 3 , P 3 = 2 , P 4 = 6 , P 5 = 5 , P 6 = 4 P1=1,P2=3,P3=2,P4=6,P5=5,P6=4

P 2 = 3 &gt; P 1 = 2 P2=3&gt;P1=2
P 3 = 2 &gt; P 1 = 1 P3=2&gt;P1=1
P 4 = 6 &gt; P 2 = 3 P4=6&gt;P2=3
P 5 = 5 &gt; P 2 = 3 P5=5&gt;P2=3
P 6 = 4 &gt; P 3 = 2 P6=4&gt;P3=2

D P [ I ] DP[I] 表示以 I I 号点作为根节点时满足题意的方案数

D P [ I ] = D P [ I &lt; &lt; 1 ] ∗ D P [ I &lt; &lt; 1 ∣ 1 ] DP[I]=DP[I&lt;&lt;1]*DP[I&lt;&lt;1|1]

D P [ 1 ] = D P [ 2 ] ∗ D P [ 3 ] DP[1]=DP[2]*DP[3]

s w a p ( P 5 , P 6 ) − &gt; P 5 = 4 , P 6 = 5 swap(P5,P6)-&gt;P5=4,P6=5

D P [ I ] = D P [ I &lt; &lt; 1 ] ∗ D P [ I &lt; &lt; 1 ∣ 1 ] DP[I]=DP[I&lt;&lt;1]*DP[I&lt;&lt;1|1]

D P [ I ] = D P [ I ∗ 2 ] ∗ D P [ I ∗ 2 + 1 ] ∗ C S i z e [ I ] − 1 S i z e [ I ∗ 2 ] DP[I]=DP[I*2]*DP[I*2+1]*C^{Size[I*2]}_{Size[I]-1}
S i z e [ I ] = S i z e [ I ∗ 2 ] + S i z e [ I ∗ 2 + 1 ] + 1 Size[I]=Size[I*2]+Size[I*2+1]+1

for(I=N;I>=1;I--){
Size[I]=Size[I<<1]+Size[I<<1|1]+1;
DP[I]=Lucas(Size[I]-1,Size[I<<1]);
if((I<<1)<=N){
DP[I]=(DP[I]*DP[I<<1])%P;
}
if((I<<1|1)<=N){
DP[I]=(DP[I]*DP[I<<1|1])%P;
}
}
• 3
点赞
• 1
评论
• 0
收藏
• 打赏
• 扫一扫，分享海报

07-03 36
03-09 306
02-28 322
07-20 405
03-01 561
11-07 116
06-28 338
10-10 245
06-10 32
09-22 196
02-24 620
03-29 61
08-10 24
07-14 472

Yucohny

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。