P4389 付公主的背包(生成函数/多项式)

P4389 付公主的背包

https://www.luogu.com.cn/problem/solution/P4389
经典生成函数问题

求解无限背包问题,我们可以将每个物品看作一个多项式,那么最后的结果就是这些多项式的卷积的系数,然后我们实际上就可以考虑分治NTT了,但是这样做的复杂度是O(nlog2n)O(nlog^2n)O(nlog2n),实际上我们有更好的方法。

因为多项式乘法很慢但是加法很快,所以我们考虑对他们取ln,然后转化为加法,但是直接做ln还是很慢,但是这个式子比较特殊我们考虑推出它的ln,可以发现这个东西的生成函数就是11−xV\frac{1}{1-x^V}1xV1求ln等价于求ln(1−xV)ln(1-x^V)ln(1xV)然后考虑求导

在这里插入图片描述这个推导方法很巧妙,将先利用生成函数运算,然后再展开为幂级数,得到我们需要的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/314131.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HDU 6265 Master of Phi

Master of Phi 推式子 ∑d∣nϕ(nd)d给出了n的唯一分解形式我们先对上面式子进行化简通过组合枚举d,d的取值分别可以通过∏i1m∑j0qipij,一个多项式组合得到那么上述的式子有没有可能也通过这种新式得到呢,好像是可以的∑d∣nϕ(nd)d∏i1m∑…

Docker系列之镜像瘦身(五)

本节我们来讲讲在我们在构建镜像过程中不出问题,同时使得最后所构建的镜像文件大小尽可能最小。缓存(cache)Docker的优势之一在于提供了缓存,加速镜像迭代构建,我们知道构建镜像使用docker build命令,也就是说通过docker build的缓…

2019-02-24-算法-进化

题目描述 将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下: L C I R E T O E S I I G E D H N之后,你的输出需要从左往右逐行读…

P5641 【CSGRound2】开拓者的卓识(多项式)

P5641 【CSGRound2】开拓者的卓识 https://www.luogu.com.cn/problem/solution/P5641 经典的讨论贡献的题目,如果一层一层展开就太暴力了,我们直接考虑每个数被计算了多少次,那么应该是它的左边放k-1个左括号,右边放k-1个右括号的…

2019-02-25-算法-进化

题目描述: 给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。 示例1: 输入: 123 输出: 321示例2: 输入: -123 输出: -321示例3: 输入: 120 输出: 21我的解法: public int reverse(…

一张图了解.Net Core和.NetFx和.Net Standard和Xamarin关系

一张图了解.Net Core和.Net Framework和.Net Standard和Xamarin关系总结.NET Standard是一项API规范,每一个特定的版本,都定义了必须实现的基类库。.NET Core是一个托管框架,针对构建控制台、云、ASP.NET Core和UWP应用程序进行了优化。每一种…

Java修炼之路——基础篇——String

String 1:字符串的不可变性 什么是不可变对象?不可变对象是指创建后无法变更的对象 String为什么是不可变的?String类为final,并且内部字符数组也为final。所以String对象是不可变对象。 String类为什么要设计为不可变&#xff1…

P3338 [ZJOI2014]力(FFT)

P3338 [ZJOI2014]力 Fj∑i1j−1qiqj(i−j)2−∑ij1nqiqj(i−j)2Ej∑i1j−1qi(i−j)2−∑ij1nqi(i−j)2f(i)qi,g(i)1i2,f(0)0,g(0)0Ej∑i0jf(i)g(j−i)−∑ijnf(i)g(i−j)F_j \sum_{i 1} ^{j - 1} \frac{q_i \times q_j}{(i - j) ^ 2} - \sum_{i j 1} ^{n} \frac{q_i \times…

CF755G PolandBall and Many Other Balls(多项式/倍增fft)

CF755G PolandBall and Many Other Balls 倍增fft模版题 这种问题关键在于两个状态转移,一个是单点加1,还有一个是乘2,这样我们就相当于拥有了二进制下的左移操作和加1操作,那么可以在O(logn)的时间内表示出任何一个数。 然后对…

VS, VS Code, VS Online, VS xxx, 你都分清了吗?

首先说说部分童鞋容易混淆的 Visual Studio 和 Visual Studio Code 吧。其实,它们俩的关系,就相当于 Java 和 JavaScript,没啥关系。再说说 Visual Studio Online。这就复杂了。历史上,出现过两个 Visual Studio Online&#xff0…

Java修炼之路——基础篇——Java关键字

1:transient 当对象被序列化时,transient阻止其修饰的对象进行序列化;当反序列化时,此对象的值不会被恢复。 2:instanceof 判断引用指向的对象,是不是某个类及其子类的实例对象; class Person …

.NetCore从零开始使用Skywalking分布式追踪系统

将本文从0开始搭建两个webapi项目,使用Skywalking来追踪他们之间的调用关系及响应时间。开发环境为VisualStudio20191:安装Skywalking,可参考:https://www.cnblogs.com/sunyuliang/p/11422576.html,本列中搭建好后的Skywalking服务…

P3723 [AH2017/HNOI2017]礼物(FFT)

P3723 [AH2017/HNOI2017]礼物 式子化简 ∑i1n(xi−yj)2\sum_{i 1} ^{n} (x_i- y_j) ^2\\ i1∑n​(xi​−yj​)2 我们对第一个手环ccc,相当于(xic−yi)2(x_i c - y_i) ^ 2(xi​c−yi​)2,对第二个手环ccc相当于(xi−yi−c)2(x_i - y_i - c) ^2(xi​−…

CF623E Transforming Sequence(多项式/倍增fft/动态规划)

CF623E Transforming Sequence 经典的倍增NTT题目,但是由于万恶的模数导致这道题变成了倍增MTT 要求n个数前缀或严格递增的序列个数,一共有k位。 然后我们考虑进行dp,然后我的思路就是fi,jf_{i,j}fi,j​表示前i位在k位中有j位的方案数&…

2019-02-26-算法-进化(字符串转换成整数)

题目描述: 请你来实现一个 atoi 函数,使其能将字符串转换成整数。 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。 当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后…

通过Service访问应用 (1)

目录通过Service访问应用 通过Pod IP访问应用 通过ClusterIP Service在集群内部访问 通过Service访问应用通过之前的操作,应用部署完成了,我们的Demo网站已经成功启动了,那么如何访问网站呢?通过Pod IP访问应用我们可以通过Pod IP…

P4239 任意模数多项式乘法逆(多项式/ MTT)

P4239 任意模数多项式乘法逆 这个题目简直就是毒瘤&#xff0c;不过还好我们可以使用vector封装要不然真的没法看&#xff0c;现在我们就会用vector封装MTT了&#xff0c;然后有一个代码细节就是这里的求逆还是在模意义下的&#xff0c;所以我们还是需要求逆。 #include<b…

多项式求逆模板(NTT + mod)

【模板】多项式乘法逆 /*Author : lifehappy */ #include <bits/stdc.h>using namespace std;typedef long long ll;const int N 1e6 10, mod 998244353, G 3;int r[N], n;ll a[N], b[N], c[N];ll quick_pow(ll a, int n) {ll ans 1;while(n) {if(n & 1) ans …

2019-02-26-算法-进化(回文数)

题目描述&#xff1a; 判断一个整数是否是回文数。回文数是指正序&#xff08;从左向右&#xff09;和倒序&#xff08;从右向左&#xff09;读都是一样的整数。 示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为…

POJ1742 Coins(DP)

Coins 思路 没分析复杂度写了个二进制拆分&#xff0c;然后做010101背包O(nlog(c)m)>10e7了O(nlog(c)m) > 10e7了O(nlog(c)m)>10e7了&#xff0c;所以还是想办法优化吧。 我们引入一个needneedneed数组&#xff0c;need[j]need[j]need[j]表示&#xff0c;在枚举到第…