转移方程在说什么

状态转移方程说的是【0】。

开始练习 →

定状态时最要紧的一条

状态定得对不对,最要紧的一条是【0】。

开始练习 →

打家劫舍的表长什么样

沿街五户人家钱数是 [2, 7, 9, 3, 1],相邻两家不能都偷。dp[i] 表示前 i 家最多能拿多少。运行下面这段程序: def rob(a): dp = [0] * (len(a) + 1) if a:

开始练习 →

最大子段和的表长什么样

dp[i] 表示以第 i 个数结尾的最大连续和。运行下面这段程序: def max_sub_tab(a): dp = [a[0]] for x in a[1:]: dp.append(max(x, dp[-1

开始练习 →

写打家劫舍

补全 rob:返回整张 dp 表,dp[i] 是前 i 家能拿到的最多钱。输出最后一项。

开始练习 →

写最大子段和

补全 max_sub:cur 是以当前这个数结尾的最大和,best 一路记住最大的那个。

开始练习 →

⚠️ 两个转移方程写在一起

把打家劫舍和最大子段和都写出来,把两个答案拼起来输出(打家劫舍在前)。 写完对照一下两个转移方程——它们的形状几乎一样。

开始练习 →

base case 设错了会怎样

dp 表的初始值设错了,后果是【0】。

开始练习 →

爬楼梯的 dp[0] 该设成多少

爬楼梯问题里 dp[0] 应该设成【0】。

开始练习 →

⚠️ 最大子段和把答案初始化成 0

写最大子段和时把 best 初始化成 0,问题在于【0】。

开始练习 →