生成函数练习小结
传送阵 Matrix67大神的总结:跟着大神学,也不喜欢叫母函数,都称生成函数。
在数学中,某个序列 的生成函数是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息。使用生成函数解决问题的方法称为母函数方法。
生成函数可分为很多种,包括普通生成函数、指数生成函数、L级数、贝尔级数和狄利克雷级数。对每个序列都可以写出以上每个类型的一个生成函数。构造生成函数的目的一般是为了解决某个特定的问题,因此选用何种生成函数视乎序列本身的特性和问题的类型。
生成函数的表示一般使用解析形式,即写成关于某个形式变量x的形式幂级数。对幂级数的收敛半径中的某一点,可以求母函数在这一点的级数和。但无论如何,由于母函数是形式幂级数的一种,其级数和不一定对每个x的值都存在。
具体我就不多说了,Matrix67大神blog里说得很好,我就直接上题了。
HDU1085 Holding Bin-Laden Captive!
生成函数的简单题,分别有1,2,5面值的货币q1,q2,q3个,让你求出最小不能由提供的货币组成的数值。由于此题很简单,只考虑了两种情况就行了。
Y=(1+x^2+x^3+x^4…+x^q1*1)*(1+x^2+x^4+x^6…x^q2*2)*(1+x^5+x^10+…x^q3*5)(这是母函数公式)
import java.io.*; import java.math.*; import java.util.*; import java.text.*; public class Main { public static void main(String[] args) { Scanner cin=new Scanner(System.in); BigInteger sum,ans; int n,i; while(true) { n=cin.nextInt(); if(n==-1) { break; } sum=BigInteger.ONE; ans=BigInteger.ONE; for(i=1;i<=n;++i) { sum=sum.multiply(BigInteger.valueOf(i)); ans=ans.multiply(BigInteger.valueOf(2*n-i+1)); } ans=ans.divide(sum); ans=ans.divide(BigInteger.valueOf(n+1)); System.out.println(ans); } } }