问题描述
记
n
的正整数拆分方案数为
n,m≤105
分析
首先一个很重要的地方就是幂应该要对 φ(mod) 取模。
然后就是怎么算正整数拆分。
其实这个本质上是一个完全背包问题,其中物体的重量为
1
到
考虑重量小于于
n−−√
的物体只有
n−−√
个,重量大于等于
n−−√
的物体只会选
n−−√
个。
那么分开处理,然后合并背包即可。
part1
记
fi,j
表示前
i
个物体,已加入重量为
part2
记
gi,j
表示已经加入了
i
个物品,重量为
那么这里这样子转移。
gi,j=gi−1,j−⌈n√⌉+gi,j−i
其中加号以前表示加入一个重量为 ⌈n−−√⌉ 的物体,以后的部分表示将之前加入的物体的重量全部加一。
剩下就是合并背包了。
时间复杂度
O(nn−−√)
空间复杂度
O(n)