这是一个家庭作业问题,必须使用动态编程方法解决。
到目前为止,我设法做到的是:
设f(x)表示x可写的次数:
然后f(x)= f(x - 1)+ 1; f(5)= f(4)+ 1(5 = 4 + 1)
但我不认为这是正确的方法。有人想帮忙吗?
问题的真实例子是:
可编写的方式4:
4: 3 + 1
4: (2 + 1) + 1
4: 2 + 2
4: (1 + 1) + (1 + 1)
答案 0 :(得分:2)
此表示形式为partition。它可以通过不同的方式解决。
例如,假设
f(x, m) - number of partitions of x
such that the largest number in that partition is m
然后
f(x, m) = sum of all f(x - m, k) where (1 <= k <= m),
also (k<=x-m), because f(x, y) = 0 where (y > x)
为你的例子(让我们将数字本身计算为一个分区(f(x,x)= 1))
f(1, 1) = 1
f(2, 1) = f(1, 1) = 1
f(2, 2) = 1
f(3, 1) = f(2, 1) = 1
f(3, 2) = f(1, 1) = 1 //+ f(1, 2) zero
f(4, 1) = f(3, 1) = 1
f(4, 2) = f(2, 1) + f(2, 2) = 2
f(4, 3) = f(1, 1) = 1 // + f(1, 2) + f(1, 3) zeroes
f(4, 4) = 1
所以f(4,1),f(4,2),f(4,3),f(4,4)= 5的总和(4如果不算4本身就是一个分区)