[题解] LuoguP4389 付公主的背包】的更多相关文章

这个题太神辣- 暴力背包就能获得\(30\)分的好成绩...... \(60\)分不知道咋搞..... 所以直接看\(100\)分吧\(QwQ\) 用一点生成函数的套路,对于一个体积为\(v\)的物品,我们构造一个序列\(f_n = [v \mid n]\ (n \ge 0)\) 其生成函数\(F(x) = \sum\limits_{i=0}^{\infty} [v \mid i]x^i = \sum\limits_{i=0}^{\infty} x^{vi} = \frac{1}{1-x^v}\…
题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装10^5105大小的东西 付公主有n种商品,她要准备出摊了 每种商品体积为Vi,都有10^5105件 给定m,对于s\in [1,m]s∈[1,m],请你回答用这些商品恰好装s体积的方案数 输入输出格式 输入格式: 第一行n,m 第二行V1~Vn 输出格式: m行,第i行代表s=i时方案数,对998244353取模 输入输出样例 输入样例#1: 2 4 1 2 输出样例#1: 1 2 2 3 说明 对于30%的数据,n<=300…
luogu 显然这是个背包题 显然物品的数量是不用管的 所以考虑大小为\(v\)的物品可以装的体积用生成函数表示一下 \[ f(x)=\sum_{i=0}^{+\infty}x^{vi}=\frac{1}{1-x^v}\\ ans=\prod_{i=1}^{n}\frac{1}{1-x^{v_i}} \] 然而这样直接乘起来复杂度是\(O(mn\ log\ n)\) 然后套路,左右套上\(ln\)就可以化乘为加 \[ ln\ ans=\sum_{i=1}^{n}ln\ \frac{1}{1-x^…
%%%dkw 话说这是个论文题来着... 考虑生成函数\(OGF\) 对于价值为\(v\)的物品,由于有\(10^5\)的件数,可以看做无限个 那么,其生成函数为\(x^0 + x^{v} + x^{2v} + ... = \frac{1}{1 - x^v}\) 我们所需的答案即\([x^n] \prod \frac{1}{1 - x^{v_i}}\) 只需考虑求出\(A = \prod \frac{1}{1 - x^{v_i}}\) 自然地想到取对数 \(In(A) = \sum In(\fr…
P4389 付公主的背包 题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装\(10^5\)大小的东西 付公主有\(n\)种商品,她要准备出摊了 每种商品体积为\(V_i\),都有\(10^5\)件 给定\(m\),对于\(s\in [1,m]\),请你回答用这些商品恰好装\(s\)体积的方案数 输入输出格式 输入格式: 第一行\(n,m\) 第二行\(V_1\sim V_n\) 输出格式: \(m\)行,第\(i\)行代表\(s=i\)时方案数,对\(998244353\)取…
题目传送门:洛谷 P4389. 题意简述: 有 \(n\) 个物品,每个物品都有无限多,第 \(i\) 个物品的体积为 \(v_i\)(\(v_i\le m\)). 问用这些物品恰好装满容量为 \(i\) 的背包的方案数,两个方案不同当且仅当存在某一个物品的选取数量不同. 你需要对 \(i\in [1,m]\) 回答,答案对 \(998,244,353\) 取模. 题解: 对于一个体积为 \(v\) 的物品,它装满容量为 \(x\) 的背包的方案数序列为 \(a_x=[v|x]\). 例如 \(…
题目链接戳这里 题目描述 有\(n\)件不同的商品,每件物品都有无限个,输出总体积为\([1,m]\)的方案数 思路 直接跑背包有\(30\) 考虑把每个物品的生成函数设出来,对于一件体积为\(v\)的物品: \[f(x)=1+x^v+x^{2v}+\cdots +x^{kv}+\cdots \] 那么答案\(F(x)\)就是每个物品的\(f\)卷起来: \[F(x)=\prod\limits_{i=1}^{n}f_i(x)=\prod\limits_{i=1}^{n}\frac{1}{1-x^…
传送门 神仙题鸭!orz dkw 暴力就是完全背包 而完全背包可以和生成函数扯上关系,记第i种物品质量为\(a_i\),那么这种物品的生成函数\(G(i)=\sum_{j=0}^{\infty}x^{a_ij}\),最后体积为i的答案即为这n个生成函数的卷积的第i项系数 然而用卷积复杂度为\(O(mnlogm)\),还不如暴力.说道卷积,我就想起了可以把多项式先求\(ln\),然后加起来,最后求\(exp\).只不过每个函数求\(ln\)复杂度还是不行,我们打表发现\(lnG(i)=\sum_{…
题目链接:洛谷 题目大意:现在有$n$个物品,每种物品体积为$v_i$,对任意$s\in [1,m]$,求背包恰好装$s$体积的方案数(完全背包问题). 数据范围:$n,m\leq 10^5$ 这道题,看到数据范围就知道是生成函数.$$Ans=\prod_{i=1}^n\frac{1}{1-x^{v_i}}$$ 但是这个式子直接乘会tle,我们考虑进行优化. 看见这个连乘的式子,应该是要上$\ln$. $$Ans=\exp(\sum_{i=1}^n\ln(\frac{1}{1-x^{v_i}})…
题意:n<=1e5,m<=1e5,跑n个物品1到m容量的完全背包. 考虑暴力的做法就是把一些1/(1+x^a)的多项式乘起来即可. 考虑优化,取一下ln,转化为加法,然后exp回去就好了.…
完全背包方案计数问题的FFT优化.首先写成生成函数的形式:对重量为V的背包,它的生成函数为$\sum\limits_{i=0}^{+\infty}x^{Vi}=\frac{1}{1-x^{V}}$于是答案就是$\prod \frac{1}{1-x^{V_k}}$.直接做显然会超时,考虑使用ln将乘法变为加法.https://www.cnblogs.com/cjyyb/p/10132855.html #include<cmath> #include<cstdio> #include&…
题目大意:有$n(n\leqslant10^5)$种物品,第$i$个物品体积为$v_i$,都有$10^5$件.给定$m(m\leqslant10^5)$,对于$s\in [1,m]$,请你回答用这些商品恰好装$s$体积的方案数 题解:(by Weng_weijie) 背包问题模板(误) 对每个物品构造生成函数$F(x)=\displaystyle\sum_{i=0}^{\infty}x^{vi}=\dfrac{1}{1-x^v}$ 然后所有相乘就得到答案(不会乘) 对每个多项式求$\ln$加起来…
题意:求一个较大的多重背包对于每个i的方案数,答案对998244353取模. 思路: 生成函数: 对于一个\(V\) 设: \(f(x) = \sum_{i=0}^{oo} x ^ {V * i} = {1 \over {1 - x ^ V}}\) 那么就是求这个生成函数的积. 首先将\(f(x)\)取\(ln\)为\(g(x)\),最后\(exp\)回去得到答案. \(g'(x) = {f'(x) \over f(x)} = (1 - x^V)\sum_{i = 1}^{oo}V * i *…
题目 退役前抄一道生成函数快乐一下 就是让我们做一个完全背包,但是朴素的做法显然是\(O(nm)\)的 把每一个物品搞成一个多项式,显然这个多项式所有\(v_i\)的倍数箱为\(1\),剩下的为\(0\) 我们写成生成函数的话就是\(\frac{1}{1-x^{v_i}}\) 也就是我们我们要求的答案就是 \[\prod_{i=1}^n\frac{1}{1-x^{v_i}}\] 直接大力卷积是 \(O(nmlogn)\)的,好像还比暴力慢了一点 发现连乘并不是很好处理,考虑取一个\(\ln\)…
\(\mathcal{Description}\)   Link.   容量为 \(n\),\(m\) 种物品的无限背包,求凑出每种容量的方案数,对 \(998244353\) 取模.   \(n,m\le10^5\). \(\mathcal{Solution}\)   感觉货币系统是这道题的弱化版 qwq.   还有这个博客园对齐公式自动编号的 feature 怎么去掉啊--   对于大小为 \(v\) 的物品,有生成函数: \[G(x)=\sum_{i=0}^{+\infty}x^{iv}…
注意 初始化的时候要这样写 for(int i=1,x;i<=n;i++){ scanf("%d",&x); v[x]++; } for(int i=1;i<=m;i++){ if(v[i]){ for(int j=1;j<=m/i;j++) a[i*j]=(a[i*j]+1LL*v[i]*invx[j]%MOD)%MOD; } } 这样写的复杂度是调和级数(\(O(n\log n)\)) 不能这样写 for(int i=1;i<=n;i++){ sca…
显然构造出生成函数,对体积v的物品,生成函数为1+xv+x2v+……=1/(1-xv).将所有生成函数乘起来得到的多项式即为答案,设为F(x),即F(x)=1/∏(1-xvi).但这个多项式的项数是Σvi级别的,无法直接分治FFT卷起来. 我们要降低多项式的次数,于是考虑取对数,化乘为加,得到lnF(x)=-Σln(1-xvi).只要对每个多项式求出ln加起来再exp回去即可. 考虑怎么对这个特殊形式的多项式求ln.对ln(1-xv)求导,得ln(1-xv)'=(1-xv)'/(1-xv)=-v…
传送门 同样是回过头来发现不会做了,要加深一下记忆. 思路 只要听说过生成函数的人相信第一眼都可以想到生成函数. 所以我们要求 \[ ans=\prod \sum_n x^{nV}=\prod \frac{1}{1-x^V} \] 也就是\(\prod (1-x^V)\). 但这玩意好像还是不会做,怎么办呢? 按照套路,可以先\(\ln\)一下,加起来,再\(\exp\)回去. 所以现在要求 \[ \sum \ln(1-x^V) \] -- -- -- 不会. 不会怎么办? 打表找规律! 经过打…
题目:https://www.luogu.org/problemnew/show/P4389 关于泰勒展开: https://blog.csdn.net/SoHardToNamed/article/details/80550935 https://www.cnblogs.com/guo-xiang/p/6662881.html 大概就是:\( f(x) = \sum\limits_{i=0}^{n}\frac{ f^{(i)}(x_0) }{i!}(x-x_0)^i +R_n\) 麦克劳林展开就…
题目 传送门 解法 答案显然是\(n\)个形如\(\sum_{i \geq 1} x^{vi}\)的多项式的卷积 然而直接NTT的时间复杂度是\(O(nm\log n)\) 我们可以把每个多项式求\(\ln\)然后相加, 在\(\exp\)回去 我们设\(f(x) = \sum_{i \geq 1} x^{vi}\), \(g(x) = \ln(f(x))\) 我们知道\(f(x) = \frac{1}{1-x^v}\) 于是 \[ \begin{align} g'(x) &= \frac{f'…
P4388 付公主的矩形 前置芝士 \(gcd\)与欧拉函数 要求对其应用于性质比较熟,否则建议左转百度 思路 有\(n×m\)的矩阵,题目要求对角线经过的格子有\(N\)个, 设函数\(f(x,y)\)为矩阵\((x,y)\)对角线经过的格子 设\(gcd(n,m)=1\),对角线在矩形中不会经过任意一个格点,\(f(n,m)=n+m-1\) 那\(gcd(n,m)!=1\)呢?将这个矩阵拆除\(gcd(n,m)\)个相同的矩阵 其中\(gcd(n',m')=1\),则\(\dfrac{n}{…
题面: 为了排解心中的怒气,她造了大量的稻草人来发泄.每天付公主都会把一些稻草人摆成一个R∗C的矩形,矩形的每个方格上都有一个稻草人.然后她站在这个矩形的左上角,向矩形的右下角射箭.付公主的箭术过人,她能穿透任意多的稻草人.弓箭经过的方格上的稻草人难逃厄运,报废掉了.看着被毁坏的稻草人,付公主开心了一些. 但是制造稻草人需要大量的金钱,所以付公主不希望坏掉太多的稻草人,所以她每天都选择毁坏掉N个稻草人.付公主还是个喜新厌旧的人,她希望每天能看到一种不同的稻草人摆放矩形.矩形是可以旋转的,即R∗C…
题目 Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 12330 Accepted Submission(s): 4922 Problem Description Whuacmers use coins.They have coins of value A1,A2,A3-An Silverland dollar. One day H…
还是挺妙的. 发现对于一个$r$行$c$列的矩阵,穿过的格子数$n = r + c - gcd(r, c)$,题目中其实给定了这个$n$,要我们计算满足这个式子的$r$和$c$的个数. 发现$n$一定要是$gcd(r, c)$的倍数,等式两边可以除掉这个$gcd(r, c)$,变成$n' = r' + c' - 1$. 那么这时候$gcd(r', c') = gcd(n' + 1 - r', c') = 1$. 根据辗转相减法,有$gcd(n' + 1, c') = 1$,而满足这个式子的$c'…
18.09.09模拟赛T1. 一道数学题. 题目传送门 首先把对角线当成是某个点的移动轨迹,从左下到右上. 那么这个点每上升一个单位长度,就穿过一个格子. 每右移一个单位长度,也会穿过一个格子. 例外:穿过格点,会减少穿过的格子数. 初步的结论:R*C的矩形,对角线穿过的格子数N=R+C-gcd(R,C). 那么我们只需算出这个方程的解的个数. 可以看出,R.C和gcd(R,C)都是gcd(R,C)的倍数. 那么N显然也是. 设N/gcd(R,C)=n,R/gcd(R,C)=r,C/gcd(R,…
正题 题目链接:https://www.luogu.com.cn/problem/P4389 题目大意 \(n\)种物品,第\(i\)种大小为\(v_i\),数量无限.对于每个\(s\in[1,m]\)求刚好填满\(s\)容量的方案数. \(1\leq n,m\leq 10^5\) 解题思路 统计和为一定值的方案数,好像可以生成函数做? 每种物品大小\(v\)有一个生成函数 \[F(x)=\sum_{i\geq 0}x^{i\times v}=\frac{1}{1-x^v} \] 然后所有生成函…
要mtt的题都是...... 多补了几项就被卡了一整页......果然还是太菜了...... 不说了......来看100分的做法吧...... 如果做过付公主的背包,前面几步应该不难想,所以我们再来写一遍柿子. 首先令\(c_i = [0,1]\)表示数\(i\)是否在集合中,那么\(f\)的生成函数就是 \[ F(x) = \prod\limits_{i=1}^n (\frac{1}{1-x^i})^{c_i} \] 乘法不太好做,我们两边\(\ln\)一下,转化成加法 \[ \ln F(x…
因为垃圾电脑太卡了就重开了一个... 前传:多项式Ⅰ u1s1 我预感还会有Ⅲ 多项式基础操作: 例题: 26. CF438E The Child and Binary Tree 感觉这题作为第一题还蛮合适的( 首先我们设 \(f_i\) 为权值之和为 \(i\) 的符合要求的二叉树的个数. 显然可以枚举根节点的权值.左子树的权值之和进行转移. 也就是 \(f_i=\sum\limits_{x\in S}\sum\limits_{y=0}^{i-S}f_yf_{i-x-y}\) 如果我们记 \(…
题面传送门 & 加强版题面传送门 竟然能独立做出 jxd 互测的题(及其加强版),震撼震撼(((故写题解以祭之 首先由于 \(a_1,a_2,\cdots,a_n\) 互不相同,故可以考虑求出所有集合 \(S=\{a_1,a_2,\cdots,a_n\}\) 的权值之和,然后答案乘上 \(n!\). 那么怎么求这个权值之和呢?首先有一个非常 naive 的 DP,\(dp_{i,j}\) 表示 \(1\sim i\) 中选了 \(j\) 个数,可得的集合的权值之和,那么显然有 \(dp_{i,j…
非常神仙的一道题! 题意:给出某n个数字跑完全背包m容量的dp数组,求满足要求的字典序最小的n个元素,不知道n是多少. 首先考虑付公主的背包这个题. 对dp数组求一个ln,设它为F. 已知 e^(G1+G2+G3)=e^F,其中Gi是第i个物品的生成函数求ln.(重量为i的物品的Gi=∑ 1/i ✖ x^vi) (上面用到的都是付公主的背包中的一些结论) 设ans[n]表示是否有n这个物品,有的话为1,没有为0. 然后显然就有 F[n]=∑ d|n ans[d] ✖ (1/(n/d)) =∑ d…