暴力和记忆化各调了多少次

👁️ 0 人浏览 💬 0 人评论 ❤️ 添加收藏

十件小物品、容量 8。一边纯暴力递归,一边加上记忆化。运行下面这段程序:

def knap_rec(items, cap, st):
    def go(i, c):
        st["t"] += 1
        if i == len(items):
            return 0
        w, v = items[i]
        best = go(i + 1, c)
        if c >= w:
            take = go(i + 1, c - w) + v
            if take > best:
                best = take
        return best
    return go(0, cap)

def knap_memo(items, cap, st):
    memo = {}
    def go(i, c):
        st["t"] += 1
        if (i, c) in memo:
            return memo[(i, c)]
        if i == len(items):
            return 0
        w, v = items[i]
        best = go(i + 1, c)
        if c >= w:
            take = go(i + 1, c - w) + v
            if take > best:
                best = take
        memo[(i, c)] = best
        return best
    return go(0, cap)

IT = [(1, 1), (2, 3), (1, 2), (2, 2), (1, 1),
       (2, 4), (1, 3), (2, 2), (1, 1), (2, 3)]
a = {"t": 0}
knap_rec(IT, 8, a)
b = {"t": 0}
knap_memo(IT, 8, b)
print(str(a["t"]) + "/" + str(b["t"]))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论