我正在学习动态编程,但在理解更复杂的问题时遇到了很多麻烦。当给定一个问题时,我被教导要找到一个递归算法,记住递归算法,然后创建一个迭代的、自下而上的版本。几乎每一步我都有一个问题。在递归算法方面,我编写了不同的方法来执行递归算法,但只有一种方法通常最适合用于动态编程,我无法区分递归算法的哪些方面使记忆更容易。在记忆方面,我不明白哪些值用于索引。为了转换为自下而上的版本,我无法确定填充数组/双精度数组的顺序。
这就是我的理解:-应该可以将主要问题拆分为子问题
就提到的问题而言,我提出了一个递归算法,它具有以下重要的代码行:
int optionOne = values[i] + find(values, i+1, limit - values[i]);
int optionTwo = find(values, i+1, limit);
如果我不清楚或者这不是正确的质量保证网站,请告诉我。
编辑:
示例:给定数组 x:[4,5,6,9,11] 和最大值 m:20
x 中小于或等于 m 的最大子序列为 [4,5,11] 为 4+5+11 = 20