首页 > 其他分享 >普通生成函数

普通生成函数

时间:2022-12-27 07:00:09浏览次数:28  
标签:right 函数 sum 普通 生成 ge left

生成函数(Generating Function)

某个序列 \(a\) 的生成函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。我们只关注系数,指数是用来构造的

普通生成函数:\(F(x)=\sum_{n\ge 0}a_nx^n\)

\(a_n\) 可以是有穷序列也可以是无穷的。例如:

\(<1,2,3>\longrightarrow 1+2x+3x^2\)

\(<1,1,1,\cdots>\longrightarrow 1+x+x^2+\cdots = \sum_{n\ge 0}x^n\)

\(<1,2,4,8,\cdots>\longrightarrow 1+2x+4x^2+8x^3\cdots = \sum_{n\ge 0}2^nx^n\)

加减运算

\(F(x)\pm G(x) = \sum_{i\ge 0}a_ix^i\pm \sum_{j\ge 0}b_jx^j=\sum_{n\ge 0}(a_n\pm b_n)x^n\)

因此 \(F(x)\pm G(x)\) 是 \(<a_n\pm b_n>\) 的普通生成函数。

乘法运算(卷积)

\(F(x)G(x) = \sum_{i\ge 0}a_ix^i\sum_{j\ge 0}b_jx^j=\sum_{n\ge 0}x^n\sum^n_{i=0}a_ib_{n-i}\) (令 \(i+j=n\))

因此 \(F(x)G(x)\) 是序列 \(<\sum^n_{i=0}a_ib_{n-i}>\) 的普通生成函数

普通生成函数的用处:解决多重集组合数的问题。

问题:有 \(n\) 种物品,每种物品 \(a_i\) 个,问取 \(m\) 个物品的组合数?

设从每种物品种取 \(b_i\) 个,\(0\le b_i\le a_i\),\(m=\sum^n_{i=1}b_i\),对于一组选定的 \(b_i\) 进行组合的方案数为 \(1\)。例如 3 个 A、1 个 B 的方案就是AAAB;取 2 个 A、2 个 B 的方案就是AABB。

构造生成函数:第 1 种物品的生成函数为 \(1+x^1+x^2+\cdots+x^{a_1}\),第 \(n\) 种物品的生成函数为 \(1 + x^1 + x2 + \cdots + x^{a_n}\)。即 \(\prod\limits^n_{i=1}\sum\limits^{a_i}_jx^j\),求 \(x^m\) 的系数。

注意指数即物品个数,系数即组合数。

例如,有 3 种物品,分别有 3,2,1 个,问取4 个物品的组合数?

枚举的话,有AAAB、AAAC、AABB、AABC、ABBC,5个方案。

构造:\(\left(1+x+x^2+x^3\right)\left(1+x+x^2\right)(1+x)\\\begin{aligned}& =\left(1+x+x^2+x+x^2+x^3+x^2+x^3+x^4+x^3+x^4+x^5\right)(1+x) \\ & =\left(1+2 x+3 x^2+3 x^3+2 x^4+x^5\right)(1+x) \\ & =\left(1+x+2 x+2 x^2+3 x^2+3 x^3+3 x^3+3 x^4+2 x^4+2 x^5+x^5+x^6\right) \\& =\left(1+3 x+5 x^2+6 x^3+5 x^4+3 x^5+x^6\right)\end{aligned}\)

例题:HDU-2152 Fruit

int n, m;
int a[110], b[110], c[110], d[210];

int calc()
{
    memset(c,0,sizeof(c)); memset(d, 0, sizeof(d));
    for (int i= a[1]; i <= b[1]; ++i)
        c[i] =1; // 填充第一个括号
    for (int i = 2; i <= n; i++) { // n 个物品
        for (int j = 0; j <= m; j++) { // 第m个物品,后面的不用算
            for(int k = a[i]; k <= b[i]; k++) {
                d[j + k] += c[j]; //d是辅助数组,类似高精乘法。
            }
        }
        for (int j = 0; j <= m; j++) {
            c[j] = d[j];
            d[j] = 0;
        }
    }
    return C[m];
}

HDU-1085 Holding bin-Laden Captive!

面值为1,2,5的硬币分别有 \(a_1,a_2,a_3\) 枚,问用这些硬币不能组成的最小面值是多少?

中国剩余定理?

构造生成函数:\(\prod_{i=1}^{n}\sum^{c_ia_i}_{j=0}x^j\),\(c\) 是单张面值。从小到大遍历系数,为 0 的那一项就是答案。这里的指数是面值,系数是方案

\(k\) 的循环需要注意。

for(int k = 0; k <= a[i] * b[i] && j + k <= m; k += b[i]) {
    d[j + k] += c[j];
}

标签:right,函数,sum,普通,生成,ge,left
From: https://www.cnblogs.com/CYLSY/p/17007252.html

相关文章

  • ffmpeg裁剪视频和openpose生成骨架
    剪视频,剪掉25秒之前的视频ffmpeg-iEverybody.mp4-ss00:00:25-s512x288-c:acopyoutput.mp4每帧25个图片输出ffmpeg-ioutput.mp4-r25%5d.png转换avi......
  • vue3_01生命周期函数
    <template><div><p>这是第一个组件</p></div></template><scriptlang="ts">import{defineComponent,onBeforeMount,onMounted}fr......
  • win32编程 -- 通过空项目学习自动生成的代码框架
    将喜欢的东西留在身边,这就是努力的意义。。。---- 网易云热评一、新建空项目 二、右击项目查看属性,修改项目字符集的属性为多字节 三、右击项目,添加c++文件 四、添加代......
  • 学生成绩信息管理系统
    学生类的设计与实现学生信息管理模块中每个学生的基本信息有学号、姓名、语文成绩、数学成绩和英语成绩,设计一个学生类,包含学号、姓名、语文成绩、数学成绩和英语成绩等数......
  • Python函数和代码复用
    文章目录​​一.函数的定义和使用​​​​1.函数的理解与定义​​​​(1).定义​​​​(2).作用​​​​(3).函数分类​​​​(3).基本语法​​​​2.函数的使用及调......
  • C#基础⑧——方法(函数、重载、out、ref)
    目录​​一、什么是方法(函数)?​​​​二、使用方法有什么好处呢?​​​​三、语法:​​​​四、实战演练​​     ​​五、ref和out传参的区别​​​​①、out的传参:​......
  • 9.函数
    """一.认识函数:在一个完整的项目中,某些功能在反复使用,那我们会将这个功能封装成函数。当使用这个的时候,直接调用函数即可。本质:函数就是对功能的封装优点:1.简化代码结......
  • 字典生成工具 -- CUPP
    你别怕,不回你消息的那个人,也总会遇到一个不回她消息的人。。。今天给大家介绍一款字典生成工具:CUPP一、环境kali2019.4python3二、安装过程:复制到本地安装包​​​ht......
  • #Powerquery 利用M函数合并文件(CSV、Text、Xlsx)
    在日常工作中,我们往往会遇到多个文件需要合并的情况,本文一起探讨一下利用M函数合并文件的案例。首先介绍一下合并步骤,1:对新建一个新查询,数据源选择为目标文件的路径。......
  • .NET机器学习 ML.NET 1.4预览版和模型生成器更新
    ​​ML.NET​​​是面向.NET开发人员的开源和跨平台机器学习框架。​​ML.NET​​​ 还包括​​ModelBuilder​​​ (一个简单的UI工具)和 ​​CLI​​ ,使用自动机......