二维记忆化用 -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 编译。)