生成函数(TBC)】的更多相关文章

生成函数 生成函数 (Generating Function) 的应用简单来说在于研究未知(通项)数列规律,用这种方法在给出递推式的情况下求出数列的通项. 对于一个数列 aaa,称f(x)=∑i=0naixif(x)=\sum_{i=0}^{n}{a_ix^i}f(x)=i=0∑n​ai​xi是数列 aaa 的 普通生成函数 (OGF),g(x)=∑i=0nai×xii!g(x)=\sum_{i=0}^{n}{a_i\times\frac{x^i}{i!}}g(x)=i=0∑n​ai​×i!xi…
题目大意: 两个人玩取数游戏,第一个人分数一开始是a,第二个分数一开始是b,接下来t轮,每轮两人都选择一个[-k,k]范围内的整数,加到自己的分数里,求有多少种情况使得t轮结束后a的分数比b高.  (1 ≤ a, b ≤ 100, 1 ≤ k ≤ 1000, 1 ≤ t ≤ 100) 1.我一开始的想法是DP出玩i轮得分是j的方案数.然后状态数最多有t*(2*k*t)那么多,最坏情况下会有2e7那么多的状态,转移必须是O(1)的. dp[i][j]=sum(dp[i-1][j-k....j+k]…
题意:给n种房子,每种房子有一个值val和个数cnt,现在要把这些房子分成两部分,争取两部分总值相等,如果不能相等,让A>B,且A-B最小. 解法:先跑一次生成函数,c[n]表示组成总值为n的方法种数,然后从Total/2~0枚举B的总值,如果c[i]不为0,说明可以达到 i 这个状态,说明这就是B的最接近A的值(因为最接近Total/2).算法复杂度较高.跑了1600多ms,不知道还有没有更优的算法. 代码: #include <iostream> #include <cstdi…
这题跟上两题也差不多. 把150以内的素数找出来,把素数的值看做硬币的面值,每个硬币的个数即ceil(150/prime[i]),因为再多也没用,最多组成n=150就行了,所以又回到了找硬币问题.用生成函数解之. 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std…
生成函数题. 题意:有币值1,2,5的硬币若干,问你最小的不能组成的币值为多少. 解法:写出生成函数: 然后求每项的系数即可. 因为三种硬币最多1000枚,1*1000+2*1000+5*1000=8000,那么多项式乘积的最高次数为8000 用c保存累计相乘各项的系数,tc保存c和当前项相乘的系数 代码: #include <iostream> #include <cstdio> #include <cstring> #include <cmath> us…
首先 1+x+x^2+x^3+...+x^∞=1/(1-x) 对于题目中的几种食物写出生成函数 (对于a*x^b , a表示方案数 x表示食物,b表示该种食物的个数) f(1)=1+x^2+x^4+...+x^∞=1/(1-x^2) f(2)=1+x f(3)=1+x+x^2 f(4)=x+x^3+x^5+...+x^∞=x/(1-x^2) f(5)=1+x^4+x^8+...+x^∞=1/(1-x^4) f(6)=1+x+x^2+x^3 f(7)=1+x f(8)=1+x^3+x^6+...+…
C# 条形码 生成函数 (Code 128 标准参考:GB/T 18347-2001) 最近在做单据打印,发现客户要求用到条形码,在网上找了,发现只有一些条形码的标准,但打出来发现根本不能扫,还要加某些字体.   以下代码经过实际扫描测试~!        /// <summary>       /// 生成条形码( 128条码,标准参考:GB/T 18347-2001 )       /// BY JUNSON 20090508       /// </summary>     …
问题提出自项目中的老代码:一个Bill表,存储所有的表单信息,比如:员工入职单,离职单等等.(别喷,我知道要分多个表.但领导的意愿你是没办法违背的)表单的单据号是以四个字母+年月日+数字顺序号来表示.每次取新单据号时要从Bill表里(按生成规则)查询出最大的那个单据号,再拆分出来,再给顺序号加1,组合好后再写回.哈哈这就是老代码. 随着软件行业的进步,各种技巧层出不穷.而针对顺序号生成的方法也有好巨大改进. [Oracle]仿Oracle Sequence的自定义年份Sequence(适合任何数…
http://tech.bobgo.net/?m=201004 因为最近的工作需要从MP4视频中提取一些关键帧,要了解如何将视频的时间点转换为对应的帧号,所以查阅了一些关于视频编解码以及时间同步方式的资料.再此总结一下. 首先是解码,利用FFmpeg解码得到的信息通常如下: Metadata:     major_brand     : isom     minor_version   : 512     compatible_brands: mp41     title      :  Dig…
题目1 COGS 很强的乘法问题 高精度乘法用FFT加速 #include <cstdlib> #include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> #define Pi acos(-1) using namespace std; + ; ; struct Complex { double r, i;…
3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 497  Solved: 331[Submit][Status][Discuss] Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等 当然,他又有一些稀奇古怪的限制: 每种…
3509: [CodeChef] COUNTARI 题意:统计满足\(i<j<k, 2*a[j] = a[i] + a[k]\)的个数 \(2*a[j]\)不太好处理,暴力fft不如直接暴力 考虑分块 每个块用生成函数统计j在块中ik在两边的块中的 有两个在块中或者三个都在暴力统计,实时维护两边权值出现次数 #include <iostream> #include <cstdio> #include <cstring> #include <algori…
Super Rooks on Chessboard UVA - 12633 题意: 超级车可以攻击行.列.主对角线3 个方向. R * C 的棋盘上有N 个超级车,问不被攻击的格子总数. 行列好好做啊,就是不被攻击的行数*列数 减去主对角线的,就是不被攻击的行列中求\(r - c = d\)的三元组个数 考虑写出行和列生成函数 \(A(x)=\sum x^{r_i},B(x)=\sum x^{-c_i}\),乘起来就行了 可以乘上\(x^c\)来避免负指数 #include <iostream>…
hdu 4609 3-idiots 题意: 给出\(A_i\),问随机选择一个三元子集,选择的数字构成三角形的三边长的概率. 一开始一直想直接做.... 先生成函数求选两个的方案(注意要减去两次选择同一个的,然后/2),然后统计三角形个数. 枚举三角形最长边,求\(i+j>k,i<k,j<k\)的方案数.后两个条件减去不合法的. 不合法很好统计 \(i \ge k \rightarrow i+j > k\) #include <iostream> #include &l…
CF Round250 E. The Child and Binary Tree 题意:n种权值集合C, 求点权值和为1...m的二叉树的个数, 形态不同的二叉树不同. 也就是说:不带标号,孩子有序 \(n,m \le 10^5\) sro vfk picks orz 和卡特兰数很像啊,\(f_i\)权值为i的方案数,递推式 \[ f[i] = \sum_{i\in C} \sum_{j=0}^{m-i}f[j]f[n-i-j] \] 用OGF表示他 \[ C(x)=\sum_{i\in C}x…
传送门 题意:三种颜色,规定使用每种颜色次数$r,g,b$,给出一个置换群,求多少种不等价着色 $m \le 60,\ r,g,b \le 20$ 咦,规定次数? <组合数学>上不是有生成函数做法吗.... 生成函数貌似可以和背包$DP$互相转换来着 然后就做出来了 每种置换求循环,$d[i][j][k][l]$表示前$i$个循环有了$j$个红$k$个绿$l$个蓝 遇到一点小问题,一直输出$0$ 看了黄学长的代码发现他加了一个恒等置换.... 想了一会儿才明白题目给的不是置换群,因为少了一个恒…
3992: [SDOI2015]序列统计 Time Limit: 30 Sec  Memory Limit: 128 MBSubmit: 1017  Solved: 466[Submit][Status][Discuss] Description 小C有一个集合S,里面的元素都是小于M的非负整数.他用程序编写了一个数列生成器,可以生成一个长度为N的数列,数列中的每个数都属于集合S. 小C用这个生成器生成了许多这样的数列.但是小C有一个问题需要你的帮助:给定整数x,求所有可以生成出的,且满足数列中…
题意:n个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种) [生成函数]: 构造这么一个多项式函数g(x),使得n次项系数为a[n]. 普通型生成函数用于解决多重集的组合问题 生成函数的x无实际意义 通常可以化为一个简单的式子 组合数的生成函数 A(x)=(1+x)^n  C(n,k)=a[k] 可以这么想,一次要么选择1要么选择x,选择x系数就会+1 生成函数系数为方案数,次数为价值 A(x) 选一个 B(x) A每项平方 选两个 C(x) A每项三次…
tbn = the time base in AVStream that has come from the container tbc = the time base in AVCodecContext for the codec used for a particular stream tbr = tbr is guessed from the video stream and is the value users want to see when they look for the vid…
[BZOJ4001][TJOI2015]概率论(生成函数) 题面 BZOJ 洛谷 题解 这题好仙啊.... 设\(g_n\)表示\(n\)个点的二叉树个数,\(f_n\)表示\(n\)个点的二叉树的叶子个数. 最终要求的东西就是\(\frac{f_n}{g_n}\). 考虑这个玩意怎么转移,先考虑二叉树个数,即怎么求\(f_n\). 每次我们认为新加入的点作为根节点,那么接下来只需要枚举其左右子树大小就行了,所以得到: \[g_n=\sum_{i=0}^{n-1}g_ig_{n-1-i}\] 然…
求所有可能联通块的第k大值的和,考虑枚举这个值: $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[i是第K大]}}$ 设cnt[i]为连通块中值>=i的个数 $ans=\sum\limits_{i=1}^{W}{i\sum\limits_{S}{[cnt[i]>=K]-[cnt[i+1]>=K]}}$ $ans=\sum\limits_{i=1}^{W}{\sum\limits_{S}{[cnt[i]>=K]}}$ 于是先考虑树上dp,设f…
题目链接戳这里 题目描述 有\(n\)件不同的商品,每件物品都有无限个,输出总体积为\([1,m]\)的方案数 思路 直接跑背包有\(30\) 考虑把每个物品的生成函数设出来,对于一件体积为\(v\)的物品: \[f(x)=1+x^v+x^{2v}+\cdots +x^{kv}+\cdots \] 那么答案\(F(x)\)就是每个物品的\(f\)卷起来: \[F(x)=\prod\limits_{i=1}^{n}f_i(x)=\prod\limits_{i=1}^{n}\frac{1}{1-x^…
题意 给出物品种类,物品单价,每种物品的数量,尽可能把其分成价值相等的两部分. 思路 背包的思路显然是用一半总价值当作背包容量. 生成函数则是构造形如$1+x^{w[i]}+x^{2*w[i]}+...+x^{num[i]*w[i]}$的多项式,找到离$sum/2$最近的就完事. 代码 #include <bits/stdc++.h> #define DBG(x) cerr << #x << " = " << x << end…
题意 从$0$到$n-1$的数字里可重复的取至多$m$个数的和等于$k$的方案数. 思路 显然的生成函数的思路为构造 $(1+x+x^{2}+...+x^{n-1})^{m}$ 那么$x^{k}$的系数即答案.等比数列求和后得到 $ \frac {(1-x^n)^m} {(1-x)^m}$ 对分子二项式展开得到 $(1-x^n)^m = \sum_{i=0}^m C_m^{i}(-1)^i * x^{n*i}$ 对分母根据泰勒展开得到 $(1-x)^{-m} = \sum_{j = 0}^{\i…
题意 给出$n$,问用$1$到$n$的数字问能构成$n$的方案数 思路 生成函数基础题,$x^{n}$的系数即答案. 代码 #include <bits/stdc++.h> #define DBG(x) cerr << #x << " = " << x << endl; using namespace std; const int N = 120 + 5; int n, c[2][N]; int main() { while(…
原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ450.html 题解 首先有一个东西叫做“单位根反演”,它在 FFT 的时候用到过: $$\frac 1 n \sum_{i=0}^{n-1} \omega_n ^{d\cdot i} = [d|n]$$ 其中 $\omega_n$ 表示 $n$ 次单位根. 接下来我们回到本题. 我们来搞一个指数生成函数,第 i 项表示总共复读 i 次,使得一个复读机开心的方案. $$f(x) = \sum_{i\ge…
Hive中的表分析函数接受零个或多个输入,然后产生多列或多行输出. 1.explode函数 explode函数以array类型数据输入,然后对数组中的数据进行迭代,返回多行结果,一行一个数组元素值 ARRAY函数是将一列输入转换成一个数组输出. hive (jimdb)> SELECT ARRAY(1,2,3) FROM dual;OK_c0[1,2,3]Time taken: 0.448 seconds, Fetched: 1 row(s) SELECT explode(array(1,2,3…
传送门 发现这是一个背包问题,而\(k\)又很大,考虑生成函数方式解决这个问题. 对于体积为\(1\)的物品的生成函数为\(\frac{1}{1 - x}\),体积为\(2\)的物品的生成函数为\(\frac{1}{1 - x^2}\),那么我们要求的就是\([x^k](\frac{1}{1-x})^n (\frac{1}{1-x^2})^m\). 而\((\frac{1}{1-x})^n = (\frac{1}{1-x^2})^n \times (1 + x)^n\),所以原生成函数等于\((…
传送门 设生成函数\(C(x) = \sum\limits_{i=0}^\infty [\exists c_j = i]x^i\),答案数组为\(f_1 , f_2 , ..., f_m\),\(F(x) = \sum\limits_{i=1}^m f_ix^i + 1\) 注意到选出一棵合法的二叉树,只需要选择一个合法的权值作为根的权值,选择一棵合法的二叉树(可以为空)作为根的左儿子,选择一棵合法的二叉树(可以为空)作为根的右儿子即可.那么有\(F(x) - 1 = F(x) * F(x) *…
题目描述 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险!我们暂且不讨论他有多么NC,他又幻想了他应 该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数.他这次又准备带一些受欢迎的食物, 如:蜜桃多啦,鸡块啦,承德汉堡等等当然,他又有一些稀奇古怪的限制:每种食物的限制如下: 承德汉堡:偶数个 可乐:0个或1个 鸡腿:0个,1个或2个 蜜桃多:奇数个 鸡块:4的倍数个 包子:0个,1个,2个或3个 土豆片炒肉:不超过一个. 面包:3的倍数个 注意,这里我们懒得考虑明明对…