三个经典题一起交
把三个都补全(爬楼梯用滚动变量版),三个答案用 / 拼起来输出:爬 10 级 / 打家劫舍 / 最大子段和。 (本题用 g++ -std=c++17 -O0 编译。)
拿到新问题先定什么
第 1 步:先填好最小的两格 第 2 步:第 2 格 = 前两格相加 第 3 步:第 3 格 = 前两格相加 第 4 步:第 4 格 = 前两格相加 第 5 步:第 5 格 = 前两格相加 第 6 步:第 6 格 = 前两格相加 第 7 步
交付一个 DP 要验什么(C++)
把一个 DP 解交出去,必须验的是【0】。
四项一起对得上吗
运行下面这段程序: #include <algorithm> #include <iostream> #include <string> #include <vector> using nam
第一步数出重复再消掉
最终作品第一步:朴素 fib 和记忆化 fib(都带计数)各算 fib(12)。输出 朴素次数 / 记忆化次数 / 结果是否一致。 (本题用 g++ -std=c++17 -O0 编译。)
第二步改成自底向上
补全填表版 fib 和填表版爬楼梯,把 fib(12) 和爬 10 级的走法数拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)
第三步自己设计两个状态
补全打家劫舍和最大子段和,两个答案拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)
第四步把边界单独验
验三种边界:最大子段和遇上全负数 [-3, -1, -4]、爬楼梯 n = 0、打家劫舍空数组。三个结果用 / 拼起来输出。 (本题用 g++ -std=c++17 -O0 编译。)
交付状态转移加记忆化
这是这条路线的最终作品。六个函数都在,补全其中的记忆化 fib、填表 fib、打家劫舍、最大子段和,main 一次验完五条:朴素 fib(12) 调用 465 次、记忆化只要 23 次且结果相同;填表 fib(12) 也是 144;爬 10
对拍要拿谁当标准
写完一个 DP,想用随机数据检查它,最好拿【0】当标准答案。