题意: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每项三次…
题目大意: 给出\(n\)个互不相同的物品,每个物品有价值\(x_i(x_i \leq 40000)\)如果可以从中取一个或两个或三个物品.问能够组合出来的所有价值和对应的方案数,全部输出.取值时,\((a,b)\)和\((b,a)\)算作一种 题解: 不要说什没有给\(n\)的范围什么的,题目表明了\(n \leq 40000\) 我们首先想到的是直接取 我们构造出只取一个物品时的母函数 \[A(x) = x + x^2 + x^3 + ...\] 然后我们取两个物品的时候的母函数就可以用乘积…
[BZOJ 3771] Triple(FFT+生成函数) 题面 给出 n个物品,价值为别为\(w_i\)且各不相同,现在可以取1个.2个或3个,问每种价值和有几种情况? 分析 这种计数问题容易想到生成函数. 设生成函数\(A(x)=\sum_{i=1}^{n} x^{w_i}\),指数为价值,系数为选的方案数.A表示每种物品取1个的方案数.同理,我们可以写出每种物品取2个和3个的生成函数. \(B(x)=\sum_{i=1}^{n} x^{2w_i}\) \(C(x)=\sum_{i=1}^{n…
瞎搞居然1A,真是吃鲸 n的范围只有聪明人能看见--建议读题3遍 首先看计数就想到生成函数,列出多项式A(x),然后分别考虑123 对于选一个的直接计数即可: 对于选两个的,\( A(x)^2 \),然后注意这里两个选一样的是不合法的,各出现了一次,所以减掉,然后这里是有顺序的,所以最后再除以2(就是(1,2)和(2,1)算两次): 对于选三个的,\( A(x)^3 \),然后去掉不合法的,设D(x)为每个斧头选两次的生成函数(也就是价格*2),然后A(x)*D(x)就表示前两个斧头重复选取的方…
Triple Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 847  Solved: 482[Submit][Status][Discuss] Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是…
解析: 这东西其实就是指数型母函数? 所以刚开始读入的值我们都把它前面的系数置为1. 然后其实就是个多项式乘法了. 最大范围显然是读入的值中的最大值乘三,对于本题的话是12W? 用FFT优化的话,达到了O(nlogn),显然可过. 但是这里有一个问题,就是如何处理重复的部分. 重复的部分我们考虑用容斥原理来解决. 为了方便描述我们不妨设三个多项式. 第一个是仅取一个而构成的多项式.->x 第二个是仅取相同的两个而构成的多项式.->y 第三个是仅取相同的三个而构成的多项式.->z 对于本题…
Time Limit: 20 Sec  Memory Limit: 64 MBSubmit: 911  Solved: 528[Submit][Status][Discuss] Description 我们讲一个悲伤的故事. 从前有一个贫穷的樵夫在河边砍柴. 这时候河里出现了一个水神,夺过了他的斧头,说: “这把斧头,是不是你的?” 樵夫一看:“是啊是啊!” 水神把斧头扔在一边,又拿起一个东西问: “这把斧头,是不是你的?” 樵夫看不清楚,但又怕真的是自己的斧头,只好又答:“是啊是啊!” 水神又…
Description 问所有三/二/一元组可能形成的组合. Sol FFT. 利用生成函数直接FFT一下,然后就是计算,计算的时候简单的容斥一下. 任意三个-3*两个相同的+2*全部相同的+任意两个-两个相同的+任意一个. Code /************************************************************** Problem: 3771 User: BeiYu Language: C++ Result: Accepted Time:1760 m…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 把方案作为系数.值作为指数,两项相乘就是系数相乘.指数相加,符合意义. 考虑去重.先自己卷积自己3次(就是求出点值表达式后a[ i ]=a[ i ]*a[ i ]*a[ i ],因为卷积3次就是点值的3次方,然后iDFT回去即可),这是无限制的然后把至少两个斧头相同的方案减去:刚才求的方案其实是有序的,所以两个斧头相同的话,第三个斧头有3个位置,要减去的是 a^2 * a 的3倍(a…
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3771 令多项式的系数是方案数,次数是值: 设 a(x) 为一个物品的多项式,即 a[w[i]].x = 1,b(x) 为两个物品重复的多项式,即 b[w[i]*2].x = 1,c(x) 为三个物品重复的多项式,即 c[w[i]*3].x = 1: 选恰好三个有序物品的答案就是 a(x)^3 - 3*a(x)*b(x)^2 + c(x),因为要无序,所以再除以 3! = 6: 选恰好两个有…