首页 > 其他分享 >生成函数学习笔记

生成函数学习笔记

时间:2023-05-04 18:35:53浏览次数:28  
标签:函数 笔记 生成 序列 num 物品 例题

概念

序列的母函数(生成函数)是一种形式幂级数。其每一项的系数可以提供关于这个序列的信息,使用母函数解决问题。

如:序列 \(a\) 的生成函数为 \(G(x)=\sum\limits_{i=1}^{n}a_if_i(x)\)。其中 \(f_i(x)\) 是无实际意义的,具体取值看题目要求。但有一些一般取值。

一般生成函数

令 \(f_k(x)=x^k\),我们得到了一般形式的生成函数。

例题1:

有 \(n\) 种物品,第 \(i\) 种物品价值 \(v_i\) 有 \(num_i\) 个,问有多少种方案可以选若干物品价值和为 \(k\)。

使用一般生成函数解决。对每个物品构造母函数。第 \(i\) 个物品的母函数 \(G(i)=1+x_{v_i}+x_{2v_i}+\cdots +x_{num_iv_i}\)。\(x^k\) 表示这一种物品选了总价值为 \(k\) 的东西,用加法原理分离。相乘得到 \(\prod\limits_{i=1}^{n}G(i)\)。最终 \(x^k\) 的系数即为答案。

例题2:

有 \(n\) 种物品,第 \(i\) 种物品价值 \(v_i\) 有 \(num_i\) 个,问可以组合出多少种不同的价值。

使用一般生成函数解决。同上,最终项数即为答案。

蠢货板子

懒了。

特殊生成函数

叉义叉的博客就给出了一种:

\(f_i(x)=\frac{x^k}{k!}\)。

对此类生成函数求导有:\(G(x)=G'(x)\)

标签:函数,笔记,生成,序列,num,物品,例题
From: https://www.cnblogs.com/lizhous/p/17372164.html

相关文章

  • 拉格朗日插值学习笔记
    拉格朗日插值学习笔记概念拉格朗日插值用于拟合一个函数。可以通过已知函数中的点拟合出函数。若为\(n\)次函数,则需要多于\(n+1\)个点。做法考虑构造\(n+1\)个函数,第\(i\)个函数\(f_i\)对应点\(i\)满足\(f_i(X_i)=Y_i\)且对于其他的点\(j(i\neqj)\)满足\(f_......
  • 学习笔记:数位dp
    1.基本模型数位dp,即以数的每一位作为状态进行dp的算法。通常状态为\(f_{i,0-9}\)表示第\(i\)为取\(0-9\)时的dp值。通常时间复杂度为\(log_{10}n\),十分优秀。2.套路求区间合法类的题,使用容斥思想思想求解,即\([1,r]-[1,l-1]\)dp式子一般很简单,可以使用矩阵快速幂优化......
  • 线性基学习笔记
    概念线性基是一个集合。从原集合中选取任意数都能通过线性基中的数异或得到。本质上是对集合的压缩性质所有数字没有最高位相同的集合大小为\(\log_2\)级别。操作排查:若线性基内有最高位相等的,让其相异或,并继续排查直到没有可操作的数。若原集合内有\(0\)线......
  • 莫队学习笔记
    概念莫队是一种幽雅的暴力。用于处理区间问题。核心思想就是把询问离线下来,然后维护双指针按一定顺序处理每个询问。精髓就在于一定顺序。首先确定一个块长,然后将左端点的位置除以块长,把询问分成若干块。在每个块里按右端点排序。发现当块长为\(\sqrtn\)时两个指针各移动\(......
  • 后缀数组学习笔记
    概念后缀数组,即对于一个串,它的每个后缀按字典序排序后得到的数组。有两个数组要求:\(SA_i\):排名为\(i\)的后缀的开头位置\(RK_i\):以\(i\)为开头的后缀的排名朴素sort排序一下优化倍增优化:我们进行\(\logn\)次排序,第\(k\)次取所有后缀的前\(2^k\)个字符进行......
  • 点分治学习笔记
    概念点分治用于解决有一定要求的链的计数。对于点\(u\)的子树的问题,可以将答案分为:经过点\(u\)不经过点\(u\)第一种可以用桶加暴力。枚举一端的长度,用桶计算另一端长度;第二种分到子树中解决即可。注意到,在随机选根的时候该算法表现不优秀,但若根为重心,因为每次子树......
  • 网络流学习笔记
    概念最大流:在一个网络图上,每个边有流量限制,假如起始点有无线流量,求最多能有多少流量流到终点。增广路:一条从起始点到终点了路径,可以流流量。算法Ford-Fulkerson算法解决这个问题,可以用Ford-Fulkerson算法。该算法的核心就是寻找增广路。每找到一条增广路,就给它它能承受......
  • PostgreSQL 生成随机整数
    首先random()函数用于生成0-1之间的随机数postgres=#SELECTrandom()asrand;rand--------------------0.6296923727161818(1row)取整函数有ceil()floor()trunc()postgres=#SELECTceil(1.5)asceil,floor(1.5)asfloor,trunc(1.5)astrunc;ceil|fl......
  • itext生成pdf并添加水印
    <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.5.10</version></dependency><dependency><......
  • C语言函数指针数组,GCC编译问题
    使用C语言函数指针数组实现简单的计算器,代码如下#include<stdio.h>#include<stdlib.h>doubleadd(doublea,doubleb){return(a+b);};doublesub(doublea,doubleb){return(a-b);};doublemul(doublea,doubleb){return(a*b);};doubl......