一尘不染

将N个数字相加为S的方法数量

algorithm

假设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。

还有其他动态编程解决方案吗?


阅读 263

收藏
2020-07-28

共1个答案

一尘不染

尝试以下递归函数:

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之后缓存它的值,并在评估它之前检查缓存中是否已经存在该值。

2020-07-28