整数拆分问题

第一种

给定n,求把n拆分成若干个不相等的数的方案数。
f[i][j]表示把j拆成i个数。
考虑要不要新添加一个数,并把之前的数全部加一。
f[i][j]=f[i1][ji]+f[i][ji]
由于数不相等,数的个数不超过n
那么时空复杂度O(nn)

第二种

我写的很简略,这里有pty的详细解释
给定n,求把n拆分成若干个数的方案数,可以相同。
我们要使用到广义五边形数。
五边形数(非广义)长这样。形如k(3k1)2(盗图)(逃
整数拆分问题
广义五边形数是k(3k+1)2,k(3k1)2
前几项是0,1,2,3,5,7,12,15,22
P(n)为拆分方案数
五边形数定理:P(n)P(n1)P(n2)+P(n3)+P(n5)...=0
其中P(0)=1,n小于0时P为0。
那么P的递推式是
P(n)=k1(1)k+1[P(nk(3k+1)2)+P(nk(3k1)2)]
注意到k的级别是n的,那么时间复杂度也是O(nn)