码迷,mamicode.com
首页 > 其他好文 > 详细

数论--二项式反演

时间:2017-10-13 19:06:15      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:can   clu   class   stream   ==   --   idt   printf   技术   

技术分享

若能凑出其中一个式子,则能反演出另外一个式子

 

应用:

HDU 1465

设g(i)表示正好有i封信装错信封

那么全部的C(n, i)*g(i)加起来正好就是所有装信的情况,总共n!(全排列)种情况

即:

技术分享

代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 using namespace std;
 4 typedef long long LL;
 5 LL fac[30];
 6 LL ans[30];
 7 LL c[30][30];
 8 int p[30];
 9 
10 void init()
11 {
12     c[1][0]=1;
13     c[1][1]=1;
14     p[0]=1;
15     p[1]=-1;
16     for(int i=2;i<=20;i++)
17     {
18         p[i]=p[i-1]*(-1);
19         
20         for(int j=0;j<=i;j++)
21         {
22             if(j==0||j==i)
23             c[i][j]=1;
24             else
25             c[i][j]=c[i-1][j-1]+c[i-1][j];
26         }
27     }
28     
29  } 
30  
31 int main()
32 {
33     init();
34     fac[0]=1;
35     fac[1]=1;
36     for(int i=2;i<=20;i++)
37     fac[i]=i*fac[i-1];
38     for(int i=1;i<=20;i++)
39     {
40         ans[i]=0;
41         for(int j=0;j<=i;j++)
42         {
43             ans[i]+=fac[j]*p[i-j]*c[i][j];
44         }
45     }
46         
47     int n;
48     while(scanf("%d",&n)!=EOF)
49     {
50         printf("%I64d\n",ans[n]);
51     }
52  } 

 

数论--二项式反演

标签:can   clu   class   stream   ==   --   idt   printf   技术   

原文地址:http://www.cnblogs.com/eastblue/p/7662357.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!