二维记忆化用 -1 构造

补全:记忆化求 10 × 10 网格的路径数,memo 里 -1 表示没算过。原来的 memo 构造时全是 0,查表永远命中。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

指针的 sizeof 只有 8

补全 clear:把传进来的 n 个 int 全部清零。原来写 memset(a, 0, sizeof a),可 a 在函数里只是个指针(本平台占 8 字节),只清掉了前两个。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

memo 用 -1 标记要填对

补全:记忆化求 fib(40),memo 里 -1 表示没算过。原来写 memset(memo, 1, sizeof memo),每格是 16843009,查表全都命中错值。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

三个经典题的共同点

第 1 步:只记住最近的两格 a、b 第 2 步:往前滚一格,旧的不用存 第 3 步:往前滚一格,旧的不用存 第 4 步:往前滚一格,旧的不用存 第 5 步:往前滚一格,旧的不用存 第 6 步:往前滚一格,旧的不用存 第 7 步:整张表只剩

开始练习 →

打家劫舍每一步在选什么

打家劫舍的转移方程,每一步在决定【0】。

开始练习 →

爬 10 级和爬 20 级

楼梯从 10 级加到 20 级,走法数会变成多少? 运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #includ

开始练习 →

另外两个经典题的答案

打家劫舍 [2, 7, 9, 3, 1],最大子段和 [-2, 1, -3, 4, -1, 2, 1, -5, 4]。 运行下面这段程序: #include <algorithm> #include <iostream&g

开始练习 →

爬楼梯只用两个变量

补全 climb_roll:不开表,只用两个变量滚着往前推。输出爬 10 级的走法数。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

打家劫舍

补全 rob 并输出最多能拿多少。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

最大子段和

补全 max_sub 并输出最大的连续和(best 和 cur 都从第一个元素起——上一节刚讲过为什么)。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →