【题意】
n(n<=500000)个物品,可以用1/2/3个不同的物品组成不同的价值,求每种价值有多少种方案(顺序不同算一种)
【输入】
第一行是整数N,表示有N个物品
接下来n行升序输入N个数字Ai,表示每个物品的价值。
【输出】
若干行,按升序对于所有可能的总价值输出一行x y,x为价值,y为方案数。
【样例输入】
4
4
5
6
8
【样例输出】
4 1
5 1
6 1
8 1
9 1
10 1
11 1
12 1
13 1
14 1
15 1
17 1
18 1
19 1
引用ATP酱的话:
要求所有组合的方案数,并且还要求具体组合出来的方案,可以想到利用生成函数
先简单说一下生成函数,生成函数其实就是一个多项式,对于这一题我们可以把多项式中x的指数看成斧头的价格,x的系数看成斧头的数量,那么这样有什么用呢,我们举一个例子来说明,比如说我有2个价值为5的斧头,1个价值为7的斧头
那么他们的多项式分别表示为 2x5 和 x7 那么把两个多项式乘起来,得到 2x12 ,因为乘法的时候指数相加,系数相乘,那么得到的这个多项式的系数就是选他们两个他们的方案数,指数就是选他们两个的损失。
我们设拿一个斧头的生成函数为 F(x)
根据生成函数的定义,那么拿两个,三个的生成函数就为 F2(x),F3(x)
那么我们是不是可以理所当然的认为答案就是
F(x)+F2