Dp与memoize

时间:2016-03-13 02:18:31

标签: dynamic-programming

这是“算法简介”dp章节

中的一个问题

我们必须削减长钢以获得最大利益

enter image description here

第一行是长度,第二行是价格。

def cut_rod_mem(n, p):
m = [0]
for i in range(10):
    m.append(-1)

def inner(n, p):
    if m[n]!=-1:
        return m[n]
    for i in range(1, n + 1):
        t = p[i] + inner(n - i, p)
        if t > m[n]:
            m[n] = t
    return m[n]

return inner(n,p)

如果此列表超出范围,我感到很困惑?

1 个答案:

答案 0 :(得分:0)

它不会超出范围,因为数组的元素是从0 to n-1索引的,即在上面的情况0 to 9中。在函数内部,for循环来自1 to n,因此内部(n - i, p)在范围内,值为inner(9, p) ..... inner(0, p)