正整数n可以拆分成若干个正整数之和,考虑拆分方案的个数。
1.证明
当对一个数i拆分,选择j为拆分点,这其可对1~j-1拆分,也可对i-j~i进行查分。记g(i,j)表示拆分整数i时最大加数不超过j的方案个数,则g(i,j) = g(i,j-1)+g(i-j,j).
2.伪代码
function NumCut
for i=1 to n
g[i,1] = i;
for i=1 to n
{
for j=2 to n
{
if i<j then g[i,j] = g[i,j]
else if i==j then g[i,j] = g[i,j-1]+1
else g[i,j] = g[i,j-1]+g[i-j,j]
}
}