第二步:把参数当成键存起来

第二步:把参数当成键存起来

补全 knap_memo:拿 (i, c) 当字典的键,进函数先查,算完先写。 输出答案和调用次数。

阅读更多 →
第一步:先写暴力搜索

第一步:先写暴力搜索

补全 knap_rec:go(i, c) 表示"从第 i 件开始挑、还剩容量 c"能拿到的最大价值。每件试"不拿"和"拿"两条路。 输出答案

阅读更多 →
三种写法算得一样吗

三种写法算得一样吗

暴力、记忆化、填表三种写法,同一批物品同一个容量。运行下面这段程序: def knap_rec(items, cap, st): def go(i, c): st["

阅读更多 →
暴力和记忆化各调了多少次

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

十件小物品、容量 8。一边纯暴力递归,一边加上记忆化。运行下面这段程序: def knap_rec(items, cap, st): def go(i, c): st[&quo

阅读更多 →
什么样的递归能导出 DP

什么样的递归能导出 DP

一个递归能改成 DP,前提是【0】。

阅读更多 →
从暴力搜索导出 DP,第一步是什么

从暴力搜索导出 DP,第一步是什么

把一个暴力递归改成 DP,第一步是【0】。

阅读更多 →
⚠️ 状压和暴力必须算出同一个数

⚠️ 状压和暴力必须算出同一个数

把状压版和全排列暴力版都写出来,跑同一组距离,输出三样:状压结果 / 暴力结果 / 是否相同(相同输出 结果一致,否则 结果不一致)。

阅读更多 →
状压解四城最短回路

状压解四城最短回路

四个城市两两之间的距离已给。从 0 号出发,每个城市恰好去一次,最后回到 0 号,求最短总路程。 补全 tsp:dp[s][u] 表示"走过的城市集合是 s、当前停在 u"时的最短

阅读更多 →
位运算三件套

位运算三件套

补全三个函数:has(第 k 位是不是 1,返回 0 或 1)、add(把第 k 位置成 1)、rm(把第 k 位清成 0)。 用 s = 10(二进制 1010)验四样,拼起来输出:has(s,1)

阅读更多 →
数出恰好选了两个的状态

数出恰好选了两个的状态

四个元素、共 16 个状态。补全代码:数出其中恰好有两位是 1 的状态有几个。

阅读更多 →