母函数

母函数简单实现

浪尽此生 提交于 2019-12-15 13:41:46
转自: Preeee 1.以一个问题为引例:重量为1,3,5g的砝码各两个,可以称出多少种重量不同的物品? 构造母函数G(x)=(1+x+x^2)(1+x^3+x^6)(1+x^5+x^10),其中x的指数表示砝码的重量,x表示砝码。 每个括号里代表的状态是取0个、取1个、取2个。 得到的各个x^n前面的系数就是每种质量可以称出的方案数目。所得式子的个数就代表可以称出多少种的重量。 2.再看另一种情况:重量为1,3,5g的砝码,可以称出某种质量的方案数目是多少? 构造母函数G1(X)=(1+x+x^2+x^3+......)(1+x^3+x^6+x^9+......)(1+x^5+x^10+x^15+......) 若质量为n,则x^n前面的系数就是方案数目。 以一个题为例:1、2、3、4.....元的面值可以组成面值为n的方案数有多少? 超级详细代码加思想: #include <iostream> using namespace std; const int _max = 10001; // c1是保存各项质量砝码可以组合的数目 // c2是中间量,保存没一次的情况 int c1[_max], c2[_max]; int main() { int nNum; //你想用已有的面值组成nNum大小的面值 int i, j, k; //该代码的前提是假设所有面值为1、2、3、4、5元

HDU 1284 钱币兑换问题(普通型 数量无限的母函数)

匿名 (未验证) 提交于 2019-12-03 00:41:02
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1284 钱币兑换问题 Problem Description 在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。 Input 每行只有一个正整数N,N小于32768。 Output 对应每个输入,输出兑换方法数。 Sample Input 2934 12553 Sample Output 718831 13137761 Author SmallBeer(CML) Source 杭电ACM集训队训练赛(VII) 分析: 母函数分为两类 普通型求组合数:数量有限普通型,数量无限普通型 指数型求排列数 本题: 数量无限的普通型母函数: 模板题 自己对母函数的研究还很浅,只会套这种简单模板。。 加油,多刷题 code: #include<bits/stdc++.h> using namespace std; typedef long long ll; #define max_v 32768 int c1[max_v]; int c2[max_v]; int main() { for ( int i= 0 ;i<max_v;i++ ) { c1[i] = 1 ; c2[i] = 0 ; } for ( int i= 2 ; i<= 3 ; i++ )