划分数就是把一个数
下面我们来讨论怎么求它。
简单 DP
我们可以设
转移有两种,要么添加一个
即
那么我们要求的划分数就是
这个算法的优点是我们可以知道所有把
根号分治 DP
可以发现,大于
设
转移有两种,要么是多加一个
即
这里的
设
转移有两种,要么添加一个
即
因为大于
那么最后的答案就是
这个算法的优点是比多项式做法容易,且复杂度优于简单 DP。缺点是我们只能求得
多项式
我们可以类似背包的来构造生成函数。
设
那么就有
即枚举选择的数的大小
根据常识,原式等于
然后通过
我们先不看
考虑怎么计算
先求导,即
那么原式就成了
最后把这一坨
不难发现当上界为
而求
这个算法的优点是能非常快的计算出
至此就讨论完了三种求划分数的方法。但是如果你认为这就完了那就 too young too simple, sometimes naive
了,出题人怎么可能就只考裸的划分数呢。
下面我们再讨论一下如果限制了划分出来的正整数个数,或者限制了划分出来的正整数的大小该怎么做。
我们可以发现,上述算法的【简单 DP】是很好处理前者的,【多项式】是很好处理后者的,而【根号分治 DP】中的
引理:把划分出来的正整数排序,并形成一个阶梯图,这个图在行列上具有对偶性。
这么说比较抽象,我也不知道表达对不对,但是看了下面的图就知道了。(只看加粗部分)
这张图不管是以列划分(左),还是以行划分(右),都可以看做是一个划分数的划分,且它们一一对应。
假设柱状物的个数为数的个数,柱状物的高度是数的大小。
那么如果限制是划分出来的正整数个数不超过数
也就是说,限制划分出来的正整数个数不超过
这样就可以解释为何上述三个同根的算法性质不同了。
Gitalking ...