随笔分类 -  组合数学

摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4556//就是求有多少个分数,对于分母i求N以内与其互质的数的个数,其实就是欧拉函数const int MM = 1000000+10;typedef __int64 ll; int N; ll phi[MM], sum[MM];void get_phi() { ll i,j,k; for(i=1;i<MM;i++) phi[i]=i; for(i=2;i<MM;i+=2) phi[i]>>=1; for(i=3;i<MM;i++) { if(phi[i]==i... 阅读全文
posted @ 2013-05-20 15:24 zhang1107 阅读(117) 评论(0) 推荐(0) 编辑
摘要:View Code //Raney引理:设整数序列A={Ai,i=1,2,...,N},且部分和为Sk=A1+,...,+Ak,序列中的所有的数字之和为Sn=1; 则在A的N个循环表示中,有且仅有一个序列B,满足B的任意部分和Si均大于零。//证明由于Sn=1,则Sk+Sn=Sk+1,存在这样一个数x,当在x和x+1之间的某点过后,其后所有的点都在0以上。 //序列// 一个序列{Ai,i=0,1,2,....,3n},由 3n+1项组成,每一项是1或-2。定义部分和Sk=A0+A1+...+Ak,求所有满足S3n=1,而且对k=0,1,...3n,Sk>0,的序列的个数。// ... 阅读全文
posted @ 2013-05-04 08:24 zhang1107 阅读(302) 评论(0) 推荐(0) 编辑
摘要:http://poj.org/problem?id=1095catalan数确定N个节点的二叉树的种数,左右分配节点确定id。View Code const int MM = 11111;const int maxn = 19;typedef __int64 int64;#define debug puts("wrong")int N;int cata[maxn];void get_cata() { int i,j,k; cata[0]=cata[1]=1; for(i=2;i<maxn;i++) { for(cata[i]=0,j=0;j<i;j++) cat 阅读全文
posted @ 2013-05-03 21:35 zhang1107 阅读(166) 评论(0) 推荐(0) 编辑
摘要:View Code //Catalan数//h[0]=h[1]=1//h[n]=sum(h[i]*h[n-i-1]) (n>i>=0)//递推关系:h[n]=C(2n,n)/(n+1);//1.括号化问题。//1.1 矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)//2.出栈次序问题。//2.1 一个栈(无穷大)的进栈序列为1,2,3,..n,有多少个不同的出栈序列?//2.2 有2n个人排成一行进入剧场。入场费5元。其中只有n个人有一张5元钞票,另外 阅读全文
posted @ 2013-04-29 12:59 zhang1107 阅读(183) 评论(0) 推荐(0) 编辑
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4013记忆化搜索,学到啦用map做映射不用担心数组开多大的问题,还有map<vector<int>,int>vis;可以对一个list进行映射,由于10^9以内的素数因子的组合很少,可以记忆化。View Code //记忆化搜索,学到啦用map做映射不用担心数组开多大的问题,还有map<vector<int>,int>vis;//可以对一个list进行映射,由于10^9以内的素数因子的组合很少,可以记忆化。const int M 阅读全文
posted @ 2013-04-29 10:34 zhang1107 阅读(260) 评论(0) 推荐(0) 编辑
摘要:View Code /*==================================================*\| 求解 C(n,m)%p 保证p为素数n很大10^9 m很小10^5\*==================================================*/typedef __int64 int64;int64 N,M, mod;int64 p[MM];void get_data() { int i,j,k; scanf("%I64d%I64d%I64d",&N,&M,&mod);}int64 exp_ 阅读全文
posted @ 2013-04-24 10:59 zhang1107 阅读(159) 评论(0) 推荐(0) 编辑
摘要:View Code /*==================================================*\| Polya计数| c种颜色的珠子, 组成长为s的项链, 项链没有方向和起始位置;\*==================================================*/// 注意超long longint Polya(int c,int s) { int i,j,k,p[64], count; p[0]=1; // power of c for(k=1; k<=s ;k++) p[k]=p[k-1]*c; //reflecti... 阅读全文
posted @ 2013-04-20 13:41 zhang1107 阅读(163) 评论(0) 推荐(0) 编辑
摘要://组合数 com(n,r)View Code /*==========================*\| 组合数 com(n,r)\*==========================*/const int maxn = 100; //元素个数int com[maxn][maxn]; //注意 long longvoid get_com() { int i,j,k; for(i=0;i<maxn;i++) { com[i][0]=1; for(j=1;j<=i;j++) com[i][j]=com[i-1][j-1]+com[i-1][j]; ... 阅读全文
posted @ 2013-04-18 11:31 zhang1107 阅读(125) 评论(0) 推荐(0) 编辑
摘要://phi[i]记录的是 0~i 之间与i互质的数的个数http://poj.org/problem?id=2478View Code const int MM = 1000005;typedef __int64 int64;int64 N;int64 phi[MM];void get_phi() { int64 i,j,k; for(i=1;i<MM;i++) phi[i]=i; for(i=2;i<MM;i+=2) phi[i]>>=1; for(i=3;i<MM;i++) { if(phi[i]==i) { for(... 阅读全文
posted @ 2013-04-17 13:09 zhang1107 阅读(168) 评论(0) 推荐(0) 编辑