假设S = 5且N = 3,则解决方案看起来像是-<0,0,5> <0,1,4> <0,2,3> <0,3,2> <5,0,0> < 2,3,0> <3,2,0> <1,2,2>等
在一般情况下,可以使用N个嵌套循环来解决该问题。运行N个嵌套循环,在其中检查循环变量是否加到S。
如果我们不提前知道N,则可以使用递归解决方案。在每个级别中,运行一个从0到N的循环,然后再次调用该函数本身。当我们到达N的深度时,请查看获得的数字是否等于S。
还有其他动态编程解决方案吗?
尝试以下递归函数:
f(s, n) = 1 if s = 0 = 0 if s != 0 and n = 0 = sum f(s - i, n - 1) over i in [0, s] otherwise
要使用动态编程,您可以在评估f之后缓存它的值,并在评估它之前检查缓存中是否已经存在该值。