而后包含N行数据,每行包含26个<=20的整数x1,x2,.....x26.
php
2 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9 2 6 2 10 2 2 5 6 1 0 2 7 0 2 2 7 5 10 6 10 2 10 6 1 9
7 379297
知识点:数组
母函数(生成函数): 函数
生成函数有普通型生成函数和指数型生成函数两种(本题是普通型)。post
形式上,普通型母函数用于解决多重集的组合问题,spa
指数型母函数用于解决多重集的排列问题。设计
母函数还可以解决递归数列的通项问题(好比使用母函数解决斐波那契数列,Catalan数的通项公式)。blog
普通母函数:递归
构造母函数G(x), G(x) = a0 + a1*x + a2* + a3*
+....+ an*
。 则称G(x)是数列a0,a1…an的母函数。ip
一般普通母函数用来解多重集的组合问题,其思想就是构造一个函数来解决这个问题。通常步骤例如如下:
1.创建模型:物品n种,每种数量分别为k1,k2,..kn个,每种物品又有一个属性值p1,p2,…pn,(如本题的字母价值),
求属性值和为m的物品组合方法数。
(若数量ki无穷 也成立。即相应如下式子中第ki项的指数一直到无穷)
2.构造母函数:G(x)=(1++
…
)(1+
+
+…
)…(1+
+
+…
) (一)
=a0 + a1*x + a2* + a3*
+....+ akk*
(设kk=k1·p1+k2·p2+…kn·pn) (二)
G(x)含义: ak 为属性值和为k的组合方法数。
母函数利用的思想:
1.把组合问题的加法法则和幂级数的乘幂相应起来。
2.把离散数列和幂级数相应起来。把离散数列间的相互结合关系相应成为幂级数间的运算关系,最后由幂级数形式来
肯定离散数列的构造。
代码实现:
求G(x)时一项一项累乘。先令G=1=(1+0*x+0*+…0*
),再令G=G*(1+
+
…
)获得形式(二)的式子…最后令G=G*(1+
+
+…
)。
题解:
1.建模:物品(字母)26种,每种数量x1,x2…x26。属性值为1,2,3..26,求属性值和<=50的组合方法数。