母函数 ...数

OEIS  是一个记录数的组织 你可以在上面找到一组数是什么数

Permutation

P  (n,r)/r;

\binom{0}{n}+\binom{1}{n}+.......+\binom{n}{n}=2^{n}

母函数

     百度上的母函数

b_{1}X^{a_{1}}*b_{2}X^{a_{2}}   实际上理解为\tiny (x^{^{0}}+x^{^{1}}+x^{^{2}}+x^{^{3}}+......+x^{^{n}})(x^{^{0}}+x^{^{2}}+x^{^{4}}+x^{^{6}}+......+x^{^{2n}})(x^{^{0}}+x^{^{5}}+x^{^{10}}+x^{^{15}}+......+x^{^{5n}})

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<deque>
#include<stack>
#include<queue>
#include<algorithm>
#include<math.h>
#include<deque>
#define MAX 100000+5
using namespace std;
typedef long long LL;
int main()
{
    LL n,i,j,k,a[305],ans[305];
    while(~scanf("%lld",&n)&&n)
    {
        for(i=0;i<=n;i++)
        {
            a[i]=1;
            ans[i]=0;
        }
        for(i=2;i<=n;i++)
        {
            for(j=0;j<=n;j++)
            {
                for(k=0;k+j<=n;k+=i*i)
                {
                    ans[k+j]+=a[j];
                }
            }
            for(j=0;j<=n;j++)
            {
                a[j]=ans[j];
                ans[j]=0;
            }
        }
        printf("%lld\n",a[n]);
    }
    return 0;
}

\tiny 1^{2}+2^{2}+3^{2}+4^{2}+5^{2}+6^{2}+......=(n+1)(2n+1)n/6 先升维后降维

滚动数组

唯一分解定理  \small n=P_{1}^{\alpha _{1}}P_{2}^{\alpha _{2}}

容斥原理

抽屉原理   桌上有十个苹果,要把这十个苹果放到九个抽屉里,无论怎样放,我们会发现至少会有一个抽屉里面至少放两个苹果。这一现象就是我们所说的“抽屉原理”。 抽屉原理的一般含义为:“如果每个抽屉代表一个集合,每一个苹果就可以代表一个元素,假如有n+1个元素放到n个集合中去,其中必定有一个集合里至少有两个元素。” 抽屉原理有时也被称为鸽巢原理。它是组合数学中一个重要的原理。

卷积

卡特兰数 

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

这里写图片描述这里写图片描述这里写图片描述所有的奇卡塔兰数Cn都满足n = 2^k − 1。
所有其他的卡塔兰数都是偶数。

应用

括号化

矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种) [4] 

出栈次序

一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

凸多边形三角划分

在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。

类似问题

一位大城市的律师在她住所以北n个街区和以东n个街区处工作。每天她走2n个街区去上班。如果她从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?

圆上选择2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?

给定节点组成二叉搜索树

给定N个节点,能构成多少种不同的二叉搜索树

(能构成h(N)个)

(这个公式的下标是从h(0)=1开始的)

n对括号正确匹配数目

#include<stdio.h>
int a[105][100];
void qwe1()
{
    int i,j,add,len,t;
    a[2][0]=1;
    a[2][1]=2;
    a[1][0]=1;
    a[1][1]=1;
    len=1;
    for(i=3;i<101;i++)
    {
        add=0;
        for(j=1;j<=len;j++)
        {
            t=(a[i-1][j])*(4*i-2)+add;
            add=t/10;
            a[i][j]=t%10;
        }
        while(add)
        {
            a[i][++len]=add%10;
            add/=10;
        }
        for(j=len;j>=1;j--)
        {
            t=a[i][j]+add*10;
            a[i][j]=t/(i+1);
            add= t%(i+1);
        }
        while(!a[i][len])
        {
            len--;
        }
        a[i][0]=len;
    }

}
int main()
{
    qwe1();
    int n;
    while(scanf("%d",&n)!=EOF)
    {
        for(int i=a[n][0];i>0;i--)
        {
            printf("%d",a[n][i]);
        }
        printf("\n");
    }
    return 0;
}

第一类Stirling数 表示将 n 个不同元素构成m个圆排列的数目。

s(p,k)的递推公式: s(p,k)=(p-1)*s(p-1,k)+s(p-1,k-1) ,1<=k<=p-1

边界条件:s(p,0)=0 ,p>=1  s(p,p)=1  ,p>=0

第二类Stirling数其表示将n个不同的元素分成m个集合的方案数

S(p,k)的递推公式是:S(p,k)=k*S(p-1,k)+S(p-1,k-1) ,1<= k<=p-1

边界条件:S(p,p)=1 ,p>=0    S(p,0)=0 ,p>=1

斯特林公式

或更精确的

默慈金数是在数学中,一个给定的数n的默慈金数是“在一个圆上的n个点间,画出彼此不相交的弦的全部方法的总数”。1, 2, 4, 9, 21, 51, 127, 323, 835, 2188, 5798, 15511, 41835, 113634, 310572, 853467, 2356779, 6536382, 18199284, 50852019, 142547559, 400763223, 1129760415, 3192727797, 9043402501, 25669818476, 73007772802, 208023278209, 593742784829

贝尔数  在组合数学里,贝尔数给出了集合划分的数目,以数学家埃里克·坦普尔·贝尔(Eric Temple Bell)命名,是组合数学中的一组整数数列  以B0= B1=1为始, 首几项的贝尔数为:1, 1, 2, 5, 15, 52, 203, 877, 4140, 21147, 115975, …  

那罗延数是组合数学问题中常用的一组计数序列。  

那罗延数N(n,k)的计算公式为

  

那罗延三角中每一行的和为卡特兰数,即

卢卡斯定理   条件 <=1e5

  欧拉函数

猜你喜欢

转载自blog.csdn.net/qq_41886199/article/details/81231986