问题:
给出任意n,k, 将整数n分成k份,且每种拆分方案不能为空,任意拆分方案不考虑顺序。
例如:1,1,5和1,5,1以及5,1,1同为n=7的一种拆分
问对于所给n和k,总共有多少种不同的拆分方法
d[7,3]
"状态转移方程"
p=3
d[4,2] {1,3} {2,2}
p=4
d[3,2] {1,2}
p=5
d[2,2] {1,1}
2+1+1=4
#方法一:递推方法
import numpy as np
n = 7
k = 3
d = np.zeros((n+1,k+1))
d[0,0] = 1
for p in range(1,n+1): # 最大的那一份是p
for i in range(p,n+1): #n的变化范围
for j in range(1,k+1):
d[i,j] += d[i-p,j-1] #动态转移方程 下一个是从i-p中挑出j-1份
d
d[n,k]
4.0
#方法二:递归方法
def g(n,p):
if n<0:
ans = 0
elif p == 1:
ans = 1
else:
ans = g(n,p-1) + g(n-p,p)
return ans
g(n-k,k)
4