Luogu 4492 [HAOI2018]苹果树 组合数
Posted 鲸头鹳
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Luogu 4492 [HAOI2018]苹果树 组合数相关的知识,希望对你有一定的参考价值。
https://www.luogu.org/problemnew/show/P4492
找每个编号的点的父边的贡献,组合数和阶乘就能算了。
我考场上怎么就是没想到呢。
调了好久好久好久好久调不出来,样例一直过不了,刚刚发现是溢出了,我是个zz。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #include<cmath> 5 #include<iostream> 6 using namespace std; 7 #define LL long long 8 LL n;LL p; 9 LL f[2010][2010]={}; 10 LL zu[2010][2010]={}; 11 LL t[2010]={}; 12 int main(){ 13 scanf("%lld%lld",&n,&p); 14 LL ans=0; zu[0][0]=1; t[0]=1; 15 for(LL i=1;i<=n;i++)t[i]=(t[i-1]*i)%p; 16 for(LL i=1;i<=n;i++){ 17 zu[i][0]=1; 18 for(LL j=1;j<=i;j++)zu[i][j]=(zu[i-1][j]+zu[i-1][j-1])%p; 19 } 20 for(LL i=1;i<=n;i++){ 21 f[i][0]=1; 22 for(int j=1;j<=n;j++){ 23 f[i][j]=(f[i][j-1]*(i+j-1))%p; 24 } 25 } 26 for(LL i=2;i<=n;i++){ 27 for(LL j=n-i+1;j>0;j--){ 28 LL w=(zu[n-i][j-1]*t[j])%p; 29 w=(w*((t[i]*f[i-1][n-i-j+1])%p))%p; 30 w=(w*((j*(n-j))%p))%p; 31 ans=(ans+w)%p; 32 } 33 } 34 printf("%lld\n",ans); 35 return 0; 36 }
以上是关于Luogu 4492 [HAOI2018]苹果树 组合数的主要内容,如果未能解决你的问题,请参考以下文章