浅谈整数拆分的四种方法

本文探讨了动态规划在解决拆分问题中的应用,通过不超过平方根部分的直接背包方法和超过部分的优化策略进行阐述。同时,介绍了五边形数的生成函数及其快速计算方法,以及F图问题的解决方案,利用阶梯状结构求解最大正方形边长。最后,讲解了指数函数的计算技巧,通过ln和exp操作简化复杂计算。这些算法和数学技巧在信息技术领域中有着广泛的应用。
摘要由CSDN通过智能技术生成

DP

  • 对于拆分为 < = n <=\sqrt n <=n 部分,直接背包,对于 > n >\sqrt n >n 的部分由于最多只有 n \sqrt n n 个,因此可以记 f [ i ] [ j ] f[i][j] f[i][j]表示用了 i i i个数,当前总和为 j j j,转移 f [ i ] [ j ] = f [ i − 1 ] [ j − n ] + f [ i ] [ j − i ] f[i][j]=f[i-1][j-\sqrt n]+f[i][j-i] f[i][j]=f[i1][jn ]+f[i][ji],之后合并即可。

五边形数

  • ϕ ( x ) = ∏ ( 1 + x i ) = 1 + ∑ i > 0 ( − 1 ) i ( x i ( 3 i − 1 ) / 2 + x i ( 3 i + 1 ) / 2 ) \phi(x)=\prod (1+x^i)=1+\sum_{i>0}(-1)^i(x^{i(3i-1)/2}+x^{i(3i+1)/2}) ϕ(x)=(1+xi)=1+i>0(1)i(xi(3i1)/2+xi(3i+1)/2),答案的生成函数为 1 ϕ ( x ) \frac{1}{\phi(x)} ϕ(x)1,因此可以直接暴力求逆,复杂度 n n n\sqrt n nn ,如果用多项式求逆就可以做到 n   l o g   n n\ log\ n n log n.

F图

  • 即将拆分方案的数写成一个阶梯,考虑阶梯角的最大正方形的边长为 h h h,那么剩下两边分为两个子阶梯,直接枚举 h h h,那么方案数就是 ∑ h ( ∏ i = 1 h 1 ( 1 − x i ) ) 2 \sum_h(\prod_{i=1}^h\frac{1}{(1-x^i)})^2 h(i=1h(1xi)1)2 h h h n \sqrt n n 级别的,每一次乘上两个 1 1 − x h \frac{1}{1-x^h} 1xh1即可。

Exp

  • l n ( 1 1 − x k ) = ∑ i ≥ 1 x i k i ln(\frac{1}{1-x^k})=\sum_{i\ge1}\frac{x^{ik}}{i} ln(1xk1)=i1ixik(求导推知),那么 l n ( A n s ( x ) ) = ∑ k l n ( 1 1 − x k ) ln(Ans(x))=\sum_kln(\frac{1}{1-x^k}) ln(Ans(x))=kln(1xk1),对于每一个 k k k有值的只有 n / k n/k n/k项,暴力求出 l n ( A n s ( x ) ) ln(Ans(x)) ln(Ans(x))之后直接exp即可。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值