交付:独立设计 DP 状态

交付:独立设计 DP 状态

这是这条路线的最终作品。把前四步的代码合起来,一次验完五条: 0/1 背包 20,完全背包 25——只差一个循环方向 二维和一维答案相同,格子数从 44 降到 11 石子合并 19(按区间长度填),最

阅读更多 →
第四步:三个二维 DP

第四步:三个二维 DP

写出网格路径(3 行 4 列)、带障碍的网格路径((1,1) 有石头)、编辑距离(horse 变 ros),三个答案拼起来输出。

阅读更多 →
第三步:两个区间 DP

第三步:两个区间 DP

写出石子合并([4,1,2,3])和最长回文子序列(bbbab),两个答案拼起来输出。

阅读更多 →
第二步:压掉一维

第二步:压掉一维

写出二维版和一维版,输出三样:一维答案 / 二维格子数 / 一维格子数。

阅读更多 →
第一步:两种背包

第一步:两种背包

最终作品第一步:写出 0/1 背包和完全背包(同一批物品、容量 10),两个答案拼起来输出(0/1 在前)。

阅读更多 →
五项一起对得上吗

五项一起对得上吗

运行下面这段程序: def knap1d(items, cap): dp = [0] * (cap + 1) for w, v in items: for c in r

阅读更多 →
交付一个进阶 DP 要验什么

交付一个进阶 DP 要验什么

把一个进阶 DP 交出去,必须验的是【0】。

阅读更多 →
设计状态先问自己什么

设计状态先问自己什么

给一个新问题设计 DP 状态,要先问【0】。

阅读更多 →
⚠️ 三种写法:省了多少,答案一样吗

⚠️ 三种写法:省了多少,答案一样吗

把三种写法都写出来,输出三样:暴力调用次数 / 记忆化调用次数 / 三个答案是否全相同(相同输出 结果一致,否则 结果不一致)。

阅读更多 →
第三步:把递归换成填表

第三步:把递归换成填表

既然状态就是 (i, c),那就可以不用递归了。写出一维填表版,输出容量 8 的最大价值。

阅读更多 →