memset 填 1 得到几
本平台 int 占 4 个字节。 运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <vec
memset 填 0x3f 得到几
竞赛里常用 0x3f 当「无穷大」。 运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <v
网格路径表的初始化
补全:5 × 5 的网格,dp 表每一格先设成 1(第一行、第一列都只有一条路),再从 (1,1) 开始填。原来用 memset 填 1,结果全错了。 (本题用 g++ -std=c++17 -O0 编译。)
无穷大别用 memset 填
补全:硬币面值 1、5、11,凑出 15 最少要几枚?dp[x] 初始都是「无穷大」1000000000,dp[0] = 0。原来用 memset 填这个数,结果全是 0。 (本题用 g++ -std=c++17 -O0 编译。)
二维记忆化用 -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